yuu_nkjm blog


2010-10-28(Thu) [長年日記]

[Linux][command][Script][find][nkf] findとnkfを使って,ファイルの文字コードを一括変換

ディレクトリorig以下の文字コードを一括変換したものを,new以下に格納する場合を考える.

origを全コピーする.これにより,ディレクトリをコピーする.

cp -a orig new

run.shを作成.

find ./orig -type f \( -name '*.java' -or -name '*.xml' \) -printf 'nkf -S -w %p > new/%P\n' > run.sh

nkfの-Sは入力がShift-JIS,-wはUTF出力である.改行コードをUNIX改行(LF)に変更したい場合は,-Luをつける.中身を確認して,run.shを実行する.

他にも,sedにファイルを喰わせても色々出来る.

find ./orig -type f \( -name '*.java' -or -name '*.xml' \) -printf 'sed s/charset=Shift_JIS/charset=utf-8/ %p > new/%P\n' > run.sh

最初はxargsを引数を一つずつ実行するオプションをつけて使おうと思ったけど,参考記事の様にfindに直接コマンドを実行させた方が分かりやすいと思った.リダイレクトを使って結果を書き出そうとすると,リダイレクト先のディレクトリが存在しないといけない.これも参考記事の様に,cp -aでコピーをとって,そこに流し込むようにすれば,間違えなさそう.

コピペ用

Javaのソースコード+XML変換.Shift-JIS→UTF-8

cp -a orig new
find ./orig -type f \( -name '*.java' -or -name '*.xml' \) -printf 'nkf -S -w %p > new/%P\n' > run.sh
. run.sh

なんでも変換.EUC→UTF-8

cp -a orig new
find ./orig -printf 'nkf -E -w %p > new/%P\n' > run.sh
. run.sh

手抜き

オプション 
 -w utf-8
 -s shift-jis
 -e euc-jp
 -Lu UNIX(LF)
 -Lw Windows(CR+LF)
 
nkf -w -Lw --overwrite *.java
本日のリンク元
その他のリンク元
検索

トップ «前の日記(2010-10-27(Wed)) 最新 次の日記(2010-10-29(Fri))» 月表示 編集 設定
2006|01|06|12|
2007|06|09|
2008|01|03|04|06|07|08|09|10|12|
2009|01|02|05|06|07|08|10|11|12|
2010|03|04|05|06|07|08|09|10|11|
2011|01|02|03|04|05|06|07|08|09|11|12|
2012|01|02|04|06|07|08|10|11|12|
2013|01|02|03|07|08|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|
2015|01|02|07|11|12|
2016|01|03|05|07|08|09|