Linux でファイル名を一括変更する

Linux でファイル名を一括変更する

「rename」コマンドを使用して、画像の名前を「something_full.jpg」から「something_500.jpg」に再帰的に変更するにはどうすればよいですか?

答え1

基本的に、このrenameツールはそのために使用できます。DebianベースのLinuxディストリビューションではPerlベースのバージョンが提供されるはずですが、ダウンロードするソースからも同様です (当然ですが、まず を使用して実行可能にする必要がありますchmod +x)。


次のコマンドは、現在のディレクトリ内のすべての JPG ファイルの_full部分を に置き換えます。_500

rename 's/_full/_500/' *.jpg

これを再帰的に実行するには、現在のディレクトリから始めて、renamewith を使用しますfind

find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;

注記:実際に is を実行する前にコマンドをテストしたい場合があります。そのためには、オプション-nrename(たとえば、文字列との間rename)'s//'に追加します。

答え2

調べてみるといいかもしれません翻訳. zmv は zsh 固有の機能であり、ファイルautoload -U zmv内のどこかに存在する必要があります.zshrc

編集:例として、OPが提示したタスクは次のように解決できます。

noglob zmv '(*)_full.(*)' '$1_500.$2'

マニュアルページからの抜粋zshcontrib:

zmv [ -finqQsvwW ] [ -C | -L | -M | -p program ] [ -o optstring ] srcpat dest

パターン srcpat に一致するファイルを、dest で指定された形式の名前を持つ対応するファイルに移動します (通常は名前を変更します)。ここで、srcpat にはパターンを囲む括弧が含まれており、dest では $1、$2、... に置き換えられます。たとえば、

zmv '(*).lis' '$1.txt'

を、などの名前foo.lisに変更します。foo.txtmy.old.stuff.lismy.old.stuff.txt

パターンは常に EXTENDED_GLOB パターンとして扱われます。置換によって名前が変更されないファイルは、単に無視されます。エラー (置換の結果が空の文字列になった、2 つの置換の結果が同じ、宛先が既存の通常ファイルであり、-f が指定されていない) が発生すると、関数全体が何もせずに中止されます。

EXTENDED_GLOB パターンは非常に強力です。ここ概念を理解するための良い入門書です。

関連情報