人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: redhat
●カテゴリ:コンピュータ インターネット
✍キーワード:EUC-JP hoge Linux UTF-8 エンコード
○ 状態 :終了
└ 回答数 : 2/3件

▽最新の回答へ

1 ● tadashi0805
●35ポイント

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

になります。

◎質問者からの返答

ありがとうございます。

詳しく書きますと

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

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


2 ● mroom
●35ポイント

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

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ