'rename'コマンドを使用して画像の名前を「something_full.jpg」から「something_500.jpg」に再帰的に変更するにはどうすればよいですか?
基本的に、そのためにrename
ツールを使用できます。 DebianベースのLinuxディストリビューションを備えたPerlベースのバージョンで提供されるはずですが、ソースからも簡単に ダウンロード できます(明らかに、最初にchmod +x
で実行可能にする必要があります) 。
次のコマンドは、現在のディレクトリ内のすべてのJPGファイルの_full
部分を_500
に置き換えます。
rename 's/_full/_500/' *.jpg
これを再帰的に行うには、現在のディレクトリから開始して、rename
とfind
を使用します。
find . -type f -iname "*.jpg" -exec rename 's/_full/_500/' {} \;
注:実際に実行する前にコマンドをテストすることをお勧めします。これを行うには、-n
オプションをrename
に追加します(たとえば、rename
と's//'
文字列の間)。
zmv を調べてみてください。 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パターンは非常に強力です。 ここ は概念の良い入門書です。