質問: ### やりたいこと→hageディレクトリ以下のhtmlファイルすべてのエンコードをEUC-JPからUTF-8にしたい hageディレクトリ以下のhtmlファイルすべてのエンコードをEUC-JPからUTF-8にしたいと思い、 テキストファイルを一括でiconv - Qiita を参考に > > find hage -type f | xargs file | grep ":.*HTML" | cut -d: -f1 | xargs -t -I{} iconv -f EUC-JP -t UTF-8 {} -o {} > > > としたところ、 > > iconv -f EUC-JP -t UTF-8 hage/2016/2016_04_22/04_22本日のほげ君/あ.html -o hage/2016/2016_04_22/04_22本日のほげ君/あ.html > > iconv -f EUC-JP -t UTF-8 hage/2016/2016_04_22/04_22本日のほげ君/い.html -o hage/2016/2016_04_22/04_22本日のほげ君/い.html > > iconv -f EUC-JP -t UTF-8 hage/2016/2016_04_22/04_22本日のほげ君/い_files/DataListTitle.html -o hage/2016/2016_04_22/04_22本日のほげ君/い_files/DataListTitle.html > > iconv -f EUC-JP -t UTF-8 hage/2016/2016_04_22/04_22本日のほげ君/い_files/DataListHyou.html -o hage/2016/2016_04_22/04_22本日のほげ君/い_files/DataListHyou.html > > iconv: 位置 32551 に不正な入力シーケンスがあります > > iconv -f EUC-JP -t UTF-8 hage/2016/2016_04_22/04_22本日のほげ君/あ_files/DataListTitle.html -o hage/2016/2016_04_22/04_22本日のほげ君/あ_files/DataListTitle.html > > iconv -f EUC-JP -t UTF-8 hage/2016/2016_04_22/04_22本日のほげ君/あ_files/DataListHyou.html -o hage/2016/2016_04_22/04_22本日のほげ君/あ_files/DataListHyou.html > > xargs: iconv: シグナル 7 によって終了しました > > xargs: file: シグナル 13 によって終了しました > > > と表示されました。 変換したいHMTMLのソースはすべて ``` 2 ``` と書いてあるのでEUC−JPからUTF-8で良いと思います。 > > $ echo $LANG > > ja_JP.UTF-8 > > > と出ました。 また、(`hage/2016/2016_04_22/04_22本日のほげ君/い.html -o hage/2016/2016_04_22/04_22本日のほげ君/い.html`)の後のファイルのエンコーディングがEUC-JP→UTF8に変換されていませんでした。 どのようにすればhageディレクトリ以下のhtmlファイルすべてのエンコードをEUC-JPからUTF-8にできますか。 ご存知のかたがいらっしゃいましたら教えていただけないでしょうか? ### 補足情報(言語/FW/ツール等のバージョンなど) 環境はubuntu15.10 bash です。
回答: シグナル 7 (バスエラー) で異常終了したのは、iconvのなんらかのバグによるものと考えてよいと思います。ウェブ検索してみると、libiconvを使用するソフトウェアで似たような報告がいくつか見つかりますが、再現条件がはっきりしない (コンパイルし直すと直ったりする) ため、原因を特定できないままのようです。 `-o`オプションでファイルを上書きしているとファイルサイズが32kiBを超えたあたりで現象が起きるという報告を見かけました (とあるブログの記事)。確証はありませんが、これが異常終了のトリガなのだとすると、上書きをしないようにすることで回避できるかもしれません。具体的には、次のようにすればいいと思います。 * iconvによる変換結果を、元のファイルとは別の一時ファイルにいったん保存する。 * 一時ファイルの内容で元のファイルを置き換える。