bash は正規表現を使用してディレクトリのファイル名を変更します。

bash は正規表現を使用してディレクトリのファイル名を変更します。

現在のディレクトリでforループを実行する次のbashスクリプトがあります。

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

実際にファイル名を次のように変更したいと思います。

myfilename-example99.jpg

到着する:

myfilename-newName.jpg

この目標をどのように達成できますか?

答え1

sedを呼び出す必要はありません。 bash パラメーターの置換により、この操作を処理できます。この試み:

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

${filename%$suffix}文字列の末尾からサフィックスを削除します。バラよりhttps://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion

答え2

簡単にprename真珠 rename):

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

関連情報