Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

Cygwin環境でのrenameの代替。ファイルの一括置換機能の実装

概要

ファイルの一括置換機能を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