拡張子を無視して、最後の「 - 」の後の部分を削除してファイル名を一括変更します

拡張子を無視して、最後の「 - 」の後の部分を削除してファイル名を一括変更します

-次のように、特定のフォルダー内のファイルの名前を一括変更し、最後の の後の部分を削除したいと思います。

  • hello world - Mr Sheephello world
  • super user - question on super user.docxsuper user.docx
  • abc - def - ghi jkl.pdfabc - 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'

関連情報