ディレクトリ内の複数のファイルを一括で文字列置換する方法 with Ruby

今後も便利に使えそうな気がするので、メモがてら残しておきます。

あるディレクトリ配下にあり、ファイル名が"*.rb"に該当する全てのファイルに対して、「hoge1」→「hoge2」の一括置換を実行するコマンドです。

$ find . -type f -name '*.rb' -print0 | xargs -0 ruby -i -p -e '$_.gsub!(/hoge1/, "hoge2")'

※ バックアップを残しておきたい場合は、「-i」のところを「-i.bak」とすると、元のファイルが「xxx.rb.bak」として保存されます。

上記は、こちらにあったコマンドを参考に、Ruby用に書き直したものになります。

あるディレクトリ以下の複数ファイル内の文字列を一括で置換するワンライナー - 元RX-7乗りの適当な日々

ワンライナーカコイイ。xargsカコイイ。

hoge1とかhoge2とか、サンプル用に書き直した文字列に見えるかもですが、実際に動いてるプログラムに対して使ったコマンドなのですよ。

まぁそんなこともあるよねー、ってことで。

※追記
同じことを書かれているサイトを発見してしまった…。
http://blog.sakatam.net/2010/04/replacing-strings-over-multiple-files-with-one-line-ruby-script/