ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

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

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"

補足

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

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

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