カレントディレクトリ以下すべてのファイルの文字コードを変換する
Macを使い始めてから、文字コードに悩まされる機会が増えました。ファイルを貰ったりすると、大抵EUCやShift-jisでうまく表示できません。各エンコーディングに対応しているエディタを使えば読むことはできますが、やっぱりターミナル上で表示できないと不便です。
対策として、iconvコマンドを使うとエンコーディングを変換することができます。
例えばtest.txtというファイルをeuc-jpからutf-8に変換したい場合、
$ iconv -f euc-jp -t utf-8 test.txt > test_utf.txt
このようにできます。
この方法の問題点
- ファイル名を変更しないといけない
- 同じ(変換元の)ファイル名をそのままリダイレクトする*1と、ファイルの中身が空っぽになる
- 1度に1つのファイルしか変換できない
大量のファイルを変換したい場合は、以下のようなシェルスクリプトを利用すると便利です。
#!/bin/sh for file in `find . -type f`; do echo $file iconv -f euc-jp -t utf-8 $file > tmpfile mv tmpfile $file done exit
"find . -type f"でカレントディレクトリ以下の全てのファイルを取得し、それぞれに対してiconvコマンドを実行します。
実行結果
$ # 変換前の表示確認 $ head test.txt ######################## ######EUC#ǽ񤫤########### $ chmod 755 convert.sh $ ./convert.sh ./test.txt ./conf/je/c_corr ./conf/je/e_conv ./conf/je/e_kaku ./conf/je/e_sent --- 中略 --- ./travel/text-j/textfile3416.jpn ./travel/tool/batch_mkorg.eng ./travel/tool/batch_mkorg.jpn ./travel/tool/bmj ./travel/tool/mkorg.csh $ # 変換後の表示確認 $ head test.txt ちゃんと変換できるかな? これはEUCで書かれているよ! iconv test. $
ちゃんと変換できましたね!