#!ruby # 日本語を文字ごとに扱うため require "jcode" # 引数の判定 # 2個より少ない時はユーザに入力を促す if ARGV.size < 2 then print ": " # 1行入力 rg = gets # 文字列の最後の改行文字を削除 rg.chop! print "replace : " replace = gets replace.chop! # 2個より多い時は使い方を表示し終了 elsif ARGV.size > 2 then print "usage: ruby rename.rb Replace\n" exit # 2個の時はその引数を使う else # 正規表現のオブジェクトを生成 rg = Regexp.new(ARGV.shift) replace = ARGV.shift end # 作成した正規表現オブジェクトを表示 puts " = " + rg.inspect # カレントディレクトリの各ファイルに対して Dir.foreach("."){|f| # 対象がファイルなら または このスクリプト自身でない なら if File.ftype(f) == "file" and File.expand_path(f) != File.expand_path($0) then $_ = f.dup # 文字列を置換し unless gsub!(rg, replace) == nil then print f + " --> " + $_ + "\n" begin # ファイルをリネーム File.rename(f, $_) rescue # 例外発生時はエラーメッセージを出す print "ERROR(Ruby): " print $!, "\n" end end end }