ファイル名の連番の桁数をそろえるスクリプト

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のかゆいとこに手が届く感が結構出た感じだったのでメモ。