2014/05/08

ubuntu nkfで文字コード一括変換
Shift-JISからUTF-8へ

Windowsは文字コードがShift-JISなので、そのファイルをUbuntu(Lubuntu)で扱うにはUTF-8に変換する必要がある。エディタで1ファイルごとに変換することもできるが、大量にあると面倒ないので、コマンドで一括変換させてみる。

nkfをインストール

Lubuntuには標準でiconvというコマンドが用意されていて、これで文字コード変換できるのだが、上書きが簡単にできなかったりと、何かと不自由なので、nkfという文字コード変換ソフトをターミナルから以下のコマンドを打ってインストール。
sudo apt-get install nkf

これでnkfが使えるようになる。

nkf単体で変換

主なオプションは以下。
-e : EUCに変換
-w : UTF-8に変換
-s : Shift-JISに変換
-Lu : 改行コードLF(UNIX)に変換
-Lw : 改行コードCR+LF(Windows)に変換
-Lm : 改行コードCR(Macintosh)に変換
--overwrite: 上書き
-g : 文字コードを出力 ファイルを調べるときに使う

以下のコマンドは、カレントディレクトリで、ファイル名に.txtがあるファイルを一括してEUC変換。上書きするように指定している。
nkf -w -Lu --overwrite *.txt

findコマンドと組み合わせてディレクトリ配下一括変換

ディレクトリ配下のすべてのtxtを変換するにはfindコマンドと組み合わせるなどの工夫が必要。
find . -name '*.txt' | xargs -n 20 nkf -w -Lu --overwrite

内容はfindで.txtが含まれたファイルを探し、結果をxargsに渡し、そしてnkfで文字コードを変換している。 さらに複数の種類のファイルを同時に変換するには-oオプションを使う。
find . -name '*.c' -o -name '*.h' | xargs -n 20 nkf -w -Lu --overwrite

内容はカレントディレクトリ配下の.cと.hのファイルを一括してUTF-8の文字コードに変換するコマンド。