find, sed, xargsを用いた一括リネーム

find, sed, xargsを用いた一括リネーム

find, sed, xargsの基本的なオプションのみを使った有用な使い方について備忘録がてら残しておくことにする。

find で対象ファイルを絞り込み

1find . -name "litmus_hit_*"

glob 検索を行う。必要に応じて-maxdepthオプションを使う。

sed でリネーム後の名前を生成

1find . -name "litmus_hit*" | sed -r "p;s/litmus_hit_([0-9]*).c/hit_litmus_\1.c/"

キャプチャした文字列の参照は$1などではなく\1。 正規表現を使う場合は-rオプションを使うこと。 pコマンドを入れておくことにより、mv に渡す元の path を生成することができる。

xargs mvで実際にリネーム

1find . -name "litmus_hit*" | sed -r "p;s/litmus_hit_([0-9]*).c/hit_litmus_\1.c/" | xargs -n2 mv

xargsに渡すことにより、一括でリネーム。

ひとこと

xargsは便利。

comments powered by Disqus