特定のフォルダ配下のファイル群のエンコードをLINUX上で一括変換したいのですが、方法はありますでしょうか。


例えば:/hoge/1.htm 2.htm 3.htm
とあったときに、通常ですと
iconv -f EUC-JP -t UTF-8 /hoge/1.htm > /hoge/1_1.htm
みたいにやると思いますが。再帰的にディレクトリ内のエンコードを変換する方法を教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/05/17 09:51:38
  • 終了:2006/05/24 09:55:03

回答(3件)

id:tadashi0805 No.1

tadashi0805回答回数287ベストアンサー獲得回数292006/05/17 10:31:06

ポイント35pt

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'`

になります。

id:redhat

ありがとうございます。

詳しく書きますと

..../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

となり、エラーになります。

2006/05/17 13:49:40
id:mroom No.2

mroom回答回数20ベストアンサー獲得回数22006/05/17 10:15:14

ポイント35pt

findと組み合わせて次のようにします。

バックアップを取ってから実行してください。:-)

find /some/dir -type f -exec nkf -E -w -OW {} \;

ファイルを上書きできるのでnkfにしましたが、mvしてiconv

するようにしてもできると思います。

http://www.tokaido.co.jp/syoko/handyman/find.html

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 tadashi0805 287 271 29 2006-05-17 15:46:43

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません