例えば:/hoge/1.htm 2.htm 3.htm
とあったときに、通常ですと
iconv -f EUC-JP -t UTF-8 /hoge/1.htm > /hoge/1_1.htm
みたいにやると思いますが。再帰的にディレクトリ内のエンコードを変換する方法を教えてください。
http://www.rhythm-cafe.com/shell/Grammer08.aspx
Linuxなので、シェルはbashでしょうから、カレントディレクトリに対象の全ファイルがあるのなら、以下のコマンドで可能です。複数行になります。実行結果のファイル名が、質問の例とちょっと違いますが、一括で変換の要件は満たしています。
for f in `ls`
do
iconv -f EUC-JP -t UTF-8 $f >$f_1
done
もし、カレントディレクトリにさらにディレクトリがあって、その中にもさらにファイルがある場合、1行目のlsが
`find . -name '*.htm'`
になります。
findと組み合わせて次のようにします。
バックアップを取ってから実行してください。:-)
find /some/dir -type f -exec nkf -E -w -OW {} \;
ファイルを上書きできるのでnkfにしましたが、mvしてiconv
するようにしてもできると思います。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | tadashi0805 | 287回 | 271回 | 29回 | 2006-05-17 15:46:43 |
ありがとうございます。
詳しく書きますと
..../hoge1/hoge2/1.htm
........../hoge3/1.htm
........../hoge4/1.htm
という風にDIRの中にDIRがあり、末端ファイル名は同じという構成です。なので、おっしゃる通り、ls をfindにかえればできました。
ただ、$fに./hoge1/hoge2/1.htm とはいるので
$f_1 の部分が ./hoge1/hoge2/1.htm_1
となり、エラーになります。