ファイル名の連番の桁数をそろえるスクリプト
Macは、連番の数字の桁数が違って
- file1.txt
- file2.txt
- file3.txt
- …
- file101.txt
- file102.txt
- …
とかなっていても番号順に並べてくれるのだけれど、JavaのListFilesは文字列順に
- file1.txt
- file10.txt
- file100.txt
- …
とかと並べてしまうのでちょっと具合が悪かった。そこで、ファイル名の連番の桁をそろえて
- file001.txt
- file002.txt
- file003.txt
- …
- file101.txt
- file102.txt
と並べるスクリプトを作成。
new File('').listFiles({it.name ==~ /[^\d]*\d{1,2}\.[^\.]*/} as FileFilter).each { it.renameTo(new File(it.parentFile, it.name.replaceAll(/\d{1,2}/){('0'*(3-it.size())) + it})) }
今回は3桁だったので1~2桁の数字の後に拡張子が来ているファイルについて、数字の長さが3に満たない分0を足したもので数字部分を置き換え。
「クロージャ as インターフェイス」とか「replaceAll(正規表現){変換処理}」とか、groovyのかゆいとこに手が届く感が結構出た感じだったのでメモ。