現在のディレクトリで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