概要
ファイルの一括置換機能をRubyで実装します
内容
Windows7+Cygwin環境でファイル名の一括置換をしようとしたところ、UNIX系のOSにある
reanmeコマンドが利用できないことに気付きました。
後述しますが、嘘でした。
Rubyで置換機能を実装してみました。
コード
class Rename def self.rename(target_dir,before,after) cnt=0 Dir::entries(target_dir).each {|file| if (file.include?(before)) cnt+=1 puts "#{cnt}:replace #{file}=>#{file.gsub(before,after)}" File::rename(file, file.gsub(before,after)) end } puts "#{cnt}件のファイル名を置換しました" end end Rename::rename("./","matlix","matrix")
実行前
$ls -1 transform.html* transform-matlix.html* transform-matlix.png* transform-matlix.txt*
実行後
$ls -1 transform.html* transform-matrix.html* transform-matrix.png* transform-matrix.txt*
2012/08/25 追記
cygwinでrenameを利用する場合はutil-linuxパッケージを使えば良いと
id:mi-kun0629さんにご指摘いただきました。
ご指摘ありがとうございます。
せっかくなのでlinux-utilのrenameで
同様の処理を試してみました。
$ls -1 transform.html transform-matlix.html transform-matlix.png transform-matlix.txt $rename matlix matrix *.* $ls -1 transform.html transform-matrix.html transform-matrix.png transform-matrix.txt