指定フォルダ以下のファイルの文字コード一括変換

Groovy

id:fumokmm さんからいいネタをいただいたので、はてなでの初めての日記の練習もかねて。
ファイルの文字コードを一括変換するツールを探していたので勉強にちょうど良いと作ってみた。実行方法は以下のとおり。

1.juniversalchardet(自動文字コード判定用ライブラリ)

google codeのプロジェクト( http://juniversalchardet.googlecode.com ) からjarファイルを落としてきて、$HOME/.groovy/lib に配置。

2.以下のスクリプトを実行

CharsetConvertor.groovy のようなファイル名で以下のスクリプトを作成。

#!/usr/bin/env groovy
assert args.size() == 2
assert args[0]
assert args[1]
dir = new File(args[0])
destenc = args[1]
detector = new org.mozilla.universalchardet.UniversalDetector(null)
dir.eachFileRecurse { file ->
    if (file.file && file.path ==~ /[^.].+/) {
        detector.with {
            def bytes = file.bytes
            reset()
            handleData(bytes as byte[], 0, bytes.size())
            dataEnd()
        }
        def encoding = detector.detectedCharset
        if (encoding)
            file.write(file.getText(encoding), destenc)
    }
}
println "finish"

補足

実行時のパラメータは以下のとおり

  • 第一引数:実行対象フォルダ
  • 第二引数:置換後エンコード

ドットファイルは対象外にしています。

Groovy

Posted by genzouw