iconvがシグナル7によって終了しました。

iconvがシグナル7によって終了しました。

いくつかのテキストファイルで小さなbashスクリプトを実行しています。

find . -name "*.dat" -exec iconv --from-code='UTF-8' --to-code='ASCII//TRANSLIT' {} --output={} \;

私のコンピュータはUbuntu 14.04 LTSです。

しばらくすると、ファイル内のデータの半分が行/単語の途中で切り捨てられたように見えました。signal 7(私の知る限り)ミステリーかコアダンプです。問題は、ファイルが大きすぎる場合に発生します。私のファイルのいくつかは60kBより大きかったが、iconv結局約30kBになった。

この問題についてどうすればよいですか?これはバグですか?解決策はありますか?発音区別符号を音訳する他の便利な方法はありますか?

答え1

私の質問に対するコメントで指摘したように、問題は2つの条件が満たされたときに発生します。

  1. ソースファイルとターゲットファイルは同じです。
  2. ファイルが32768バイトより大きい。

2つの回避策があります。一時ファイルを変換し、ソースファイルを自動的に置き換えたり、recode

最初の回避策については例をご覧ください。https://unix.stackexchange.com/a/10243/94483。についてはspongeSOに関する非常に良い質問があります(https://stackoverflow.com/q/64860/362146)ここへの答えは次のとおりです。https://unix.stackexchange.com/a/19980/94483

iconvこれで、より少ない数の文字セットをサポートするためにasを使用する予定ですrecode(そしてこの機能も機能しませんでした)。

FILELIST=$(find . -type f -name "*.dat")

for file in $FILELIST
do
  iconv --from-code='UTF-8' --to-code='ASCII//TRANSLIT' "$file" | sponge "$file"
done

sponge交換作業を行います。からその他のユーティリティ

関連情報