多くのファイルの特定の部分名を変更する

多くのファイルの特定の部分名を変更する

次のファイルがたくさんあります。

Brooklyn Nine-Nine S01 E01 [H264].mkv
Brooklyn Nine-Nine S01 E02 [H264].mkv
Brooklyn Nine-Nine S01 E03 [H264].mkv
Brooklyn Nine-Nine S01 E04 [H264].mkv
Brooklyn Nine-Nine S01 E05 [H264].mkv
Brooklyn Nine-Nine S01 E06 [H264].mkv
Brooklyn Nine-Nine S01 E07 [H264].mkv
Brooklyn Nine-Nine S01 E08 [H264].mkv
...

S01とE08の間のスペースが削除されるように名前を変更したいと思います。はい

Brooklyn Nine-Nine S01E08 [H264].mkv

すべてのスペースを削除するコマンドが見つかりました。

IFS="\n"
for file in *.mkv;
do
    mv "$file" "${file/[[:space:]]}"
done

しかし、SxxとExxの間のスペースを削除したいと思います。

答え1

最も簡単な方法は、このrenameツールを使用することです。このツールを使用すると、複数のファイル名を簡単に検索して変更できます。

rename [options] <expression> <replacement> <file>...

次のようにする必要があります。

rename " E0" E0 Brooklyn*.mkv

Debianに似たディストリビューションを使用している場合、コマンドはrename代わりに異なる入力構文を使用してPerlスクリプトを呼び出すことができますutil-linux。この場合、rename.ul正しい構文を呼び出すツールを使用してください。Debian / Ubuntuの名前変更ユーティリティがCentOSなどの他のディストリビューションの名前変更ユーティリティと異なるのはなぜですか?

答え2

forループは次のように編集できます。

for file in *.mkv;
do
   mv "$file" "${file//S01 E0/S01E0}"
done

または、rename次のコマンドを使用します。

rename 's/S01 E0/S01E0/' *.mkv

関連情報