「rename」コマンドを使用して、画像の名前を「something_full.jpg」から「something_500.jpg」に再帰的に変更するにはどうすればよいですか?
答え1
基本的に、このrename
ツールはそのために使用できます。DebianベースのLinuxディストリビューションではPerlベースのバージョンが提供されるはずですが、ダウンロードするソースからも同様です (当然ですが、まず を使用して実行可能にする必要がありますchmod +x
)。
次のコマンドは、現在のディレクトリ内のすべての JPG ファイルの_full
部分を に置き換えます。_500
rename 's/_full/_500/' *.jpg
これを再帰的に実行するには、現在のディレクトリから始めて、rename
with を使用しますfind
。
find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;
注記:実際に is を実行する前にコマンドをテストしたい場合があります。そのためには、オプション-n
をrename
(たとえば、文字列との間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.txt
my.old.stuff.lis
my.old.stuff.txt
パターンは常に EXTENDED_GLOB パターンとして扱われます。置換によって名前が変更されないファイルは、単に無視されます。エラー (置換の結果が空の文字列になった、2 つの置換の結果が同じ、宛先が既存の通常ファイルであり、-f が指定されていない) が発生すると、関数全体が何もせずに中止されます。
EXTENDED_GLOB パターンは非常に強力です。ここ概念を理解するための良い入門書です。