-
次のように、特定のフォルダー内のファイルの名前を一括変更し、最後の の後の部分を削除したいと思います。
hello world - Mr Sheep
にhello world
super user - question on super user.docx
にsuper user.docx
abc - def - ghi jkl.pdf
にabc - def.pdf
コマンドラインソリューションを希望しますが、他のオプションでも問題ありません。
答え1
最後の-
使用を削除するには${f% - *}
、bashのように${var%Pattern}
変数の末尾にある最短のパターンを削除します。詳細については、パラメータ置換結果は次のようになります
for f in path/*
do
if [[ $f = *.* ]]; then ext=".${f##*.}"; else ext=""; fi
echo mv "$f" "${f% - *}$ext"
done
新しいファイル名が正しいことを確認したら、削除してecho
実際の名前変更を行うことができます。デモ:
$ for f in "hello world - Mr Sheep" "super user - question on super user.docx" "abc - def - ghi jkl.pdf"; do if [[ $f = *.* ]]; then ext=".${f##*.}"; else ext=""; fi; echo mv "'$f'" "'${f% - *}$ext'"; done
mv 'hello world - Mr Sheep' 'hello world'
mv 'super user - question on super user.docx' 'super user.docx'
mv 'abc - def - ghi jkl.pdf' 'abc - def.pdf'