iconv terminado por sinal 7

1

Eu estava executando um pequeno script bash em alguns arquivos de texto:

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

Minha máquina é um Ubuntu 14.04 LTS.

Depois de um tempo, descobri que metade dos dados nos arquivos desapareceu; simplesmente cortar no meio de uma linha / palavra. É o misterioso signal 7 ou core dump (como eu ouvi). O problema é de alguma forma, quando os arquivos são muito grandes. Alguns dos meus arquivos têm > 60kB, mas iconv fizeram deles cerca de 30kB.

O que posso fazer sobre isso? Isso é um inseto? Existe uma solução alternativa? Existe alguma outra maneira conveniente de transliterar diacríticos?

    
por MERose 26.12.2014 / 15:54

1 resposta

0

Como apontado nos comentários à minha pergunta, o problema ocorre quando duas condições são atendidas:

  1. O arquivo de origem e de destino é o mesmo.
  2. O arquivo é maior que 32768 bytes.

Existem duas soluções: converter um arquivo temporário que substitui automaticamente o arquivo de origem ou usar recode .

Quanto à primeira solução, veja por exemplo. link . Para sponge , há uma pergunta muito boa sobre SO ( link ) e também uma resposta aqui: link

Agora vou usar iconv como recode suporta menos conjuntos de caracteres (e também não consegui executá-lo):

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 faz o trabalho de substituição. É de moreutils .

    
por 26.12.2014 / 17:36