id:fumokmm さんからいいネタをいただいたので、はてなでの初めての日記の練習もかねて。
ファイルの文字コードを一括変換するツールを探していたので勉強にちょうど良いと作ってみた。実行方法は以下のとおり。
1.juniversalchardet(自動文字コード判定用ライブラリ)
google codeのプロジェクト( http://juniversalchardet.googlecode.com ) からjarファイルを落としてきて、$HOME/.groovy/lib に配置。
2.以下のスクリプトを実行
CharsetConvertor.groovy のようなファイル名で以下のスクリプトを作成。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #!/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"
|
補足
実行時のパラメータは以下のとおり
- 第一引数:実行対象フォルダ
- 第二引数:置換後エンコード
ドットファイルは対象外にしています。