bash renomeia arquivos no diretório usando regex

1

Atualmente, tenho o seguinte script bash que faz um loop for no diretório:

for filename in *-example99.jpg
do
   width=$(identify -format "%w" "$filename")
   myVar="newName$width"
   new=$(echo $filename | sed -e 's/\.jpg$/"$myVar".jpg/')
   echo "$filename" "$new"
   mv "$filename" "$new"
done

na verdade, quero renomear o arquivo de:

myfilename-example99.jpg

para:

myfilename-newName.jpg

Como posso conseguir isso?

    
por moaningalways 11.12.2017 / 17:18

2 respostas

3

Você não precisa chamar o sed: a substituição de parâmetro bash pode lidar com essa tarefa. Tente isto:

suffix="-example99.jpg"
for filename in *"$suffix"        # wildcard * must remain unquoted
do
   width=$(identify -format "%w" "$filename")
   new="${filename%$suffix}-newName${width}.jpg"
   echo mv "$filename" "$new"
done

O ${filename%$suffix} remove o sufixo do final da string. Consulte o link

    
por 11.12.2017 / 17:37
0

Simplesmente com prename ( Perl rename ):

myVar="newName"
prename 's/-[^-.]+(\.jpg)$/-'"$myVar"'$1/' *-example99.jpg
    
por 11.12.2017 / 17:26