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

正如我的问题的评论中指出的,当满足两个条件时就会出现问题:

  1. 源文件和目标文件相同。
  2. 文件大于 32768 字节。

有两种解决方案:要么转换一个临时文件,然后自动替换源文件,要么使用recode.

至于第一个解决方案,请参见示例。https://unix.stackexchange.com/a/10243/94483。对于sponge,有一个关于 SO 的非常好的问题(https://stackoverflow.com/q/64860/362146)以及这里的答案:https://unix.stackexchange.com/a/19980/94483

我现在将使用iconvasrecode支持较少的字符集(而且我也未能使其运行):

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进行替换工作。来自于更多实用程序

相关内容