[perl] ファイル名を一括で変換する

ファイル名を正規表現で一括変換したい時ってたまにあります。

  • 提供されたファイルの名称がおかしい
  • iOSのプロジェクトに入れるファイル名に変換したい(@2xとかしたい)

perlのワンライナーで一括変換できます。

perl -e 'for(glob("*")){$old=$_;s/HOGE/FOO/;rename($old,$_);}'

カレントディレクトリの全てのファイルに対して
s/HOGE/FOO/をした結果に置き換えます。

glob()の中はグロブでファイルを指定可能です。
".png"ならカレントディレクトリのピングファイルが対象になります。

注意点としては、置き換えの中に@があったらエスケープが必要です。
s/hogehoge/foo\@2x/

あと、一応バックアップを取ってからやりましょう。

後方参照を使って置き換える

123jpg とドットをつけ忘れてしまったファイルを123.jpgに変換したいような時は...

perl -e 'for(glob("*jpg")){$old=$_;s/([0-9]+)jpg/$1\.jpg/;rename($old, $_);}'

括弧で囲って$1, $2...で置き換えます。

0 件のコメント :

コメントを投稿