Ruby でファイル名の桁数を揃えながら置換する方法
この記事は投稿されてから1年以上経っています。内容が古くなっているかもしれませんので、ご注意ください。
Flexible Renamer というとても素敵なリネームソフトでサクッと置換しちゃうところなんですけど、Mac OS には対応しておらず・・・
ということで、勉強中の Ruby でスクリプトを書いてみることに。
やりたいことと、Ruby のサンプルスクリプト
以下の様なファイル名の画像を
img102_01.png img102_02.png img103_00.png img204_00.png
以下のように、数字3桁の部分を4桁に書き換える方法。
img0102_01.png img0102_02.png img0103_00.png img0204_00.png
色々と書き方はあると思うんだけど、以下のように書くのが簡単な気がする。
require "fileutils"
Dir.glob("*.png") do |filename|
newname = filename.gsub(/(\d{3})/){sprintf("%04d", $1.to_i)}
FileUtils.mv(filename, newname)
end
gsub の引数の「正規表現」のところと、sprintf の第1の引数の「書式」のところを替えれば使いまわせます。
簡単なものなら Mac OS のターミナルで置換
態々 Ruby でスクリプトを書かなくても、簡単なものならターミナルでサクッとコマンドを叩く方法も。
例えば、以下のようにコマンドを叩くと
$ for F in *.png; do mv $F ${F/img/image}; done
以下のファイル名が
img102_01.png img102_02.png
以下の様な感じに。
image102_01.png image102_02.png