Как получить все после расширения Unix - PullRequest
0 голосов
/ 10 мая 2018

У меня есть имя файла, например filename.txt.zip_20180202_30291_233

В переменной скрипта у меня будет имя файла в переменной и расширение в переменной, например

echo $fileprefix
filename
echo $filesuffix
.txt.zip

Как переименовать файлниже одного?Переместить все после расширения до расширения?(Примечание: после расширения могут быть любые цифры)

filename_20180202_30291_233.txt.zip

Ответы [ 2 ]

0 голосов
/ 10 мая 2018
#!/bin/sh

prefix='filename'
suffix='.txt.zip'

name='filename.txt.zip_20180202_30291_233'
newname="$prefix${name#$prefix$suffix}$suffix"

echo mv "$name" "$newname"

Это приведет к выводу

mv filename.txt.zip_20180202_30291_233 filename_20180202_30291_233.txt.zip

Подстановка параметров ${name#$prefix$suffix} удаляет $prefix$suffix, то есть filename.txt.zip, с начала $name, что дает вам _20180202_30291_233.Затем к этому добавляется $prefix и добавляется $suffix для создания $newname.

Цикл по всем файлам, которые совпадают с "$prefix$suffix"* в текущем каталоге, и переименование всех:

for name in "$prefix$suffix"*; do
    newname="$prefix${name#$prefix$suffix}$suffix"
    echo mv "$name" "$newname"
done

echo там для защиты.Удалите его, если вы уверены, что код будет работать правильно.

0 голосов
/ 10 мая 2018
file_orig=filename.txt.zip_20180202_30291_233
fileprefix=filename
filesuffix=.txt.zip
file="${file_orig#$fileprefix}"
file="${file#$filesuffix}"
file="$fileprefix$file$filesuffix"
echo "$file"
filename_20180202_30291_233.txt.zip

https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...