iconv завершен сигналом 7

В некоторых текстовых файлах я запускал небольшой скрипт bash:

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

Моя машина – Ubuntu 14.04 LTS.

Через некоторое время я обнаружил, что половина данных в файлах исчезла; просто срезайте в середине строки / слова. Это таинственный signal 7 или свалка ядра (как я слышал). Проблема в том, что когда файлы слишком большие. Некоторые из моих файлов имеют> 60 КБ, но iconv сделал их вокруг 30 КБ.

Что я могу сделать по этому поводу? Это ошибка? Есть ли обходной путь? Есть ли другой удобный способ транслитерации диакритики?

One Solution collect form web for “iconv завершен сигналом 7”

Как указано в комментариях к моему вопросу, проблема возникает, когда выполняются два условия:

  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

Теперь я буду использовать iconv поскольку 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 выполняет заменяющее задание. Это больше .

  • Разделить текстовый файл в случайных половинах по категории
  • Как я могу объединить два на два столбца, используя оболочку
  • Как читать файлы Word .doc?
  • Почему я не могу преобразовать UTF-8 в MS-ANSI с помощью iconv?
  • как удалить последние две строки с разделителями из каждой строки в большом файле
  • Недостаточно места на диске: удалите первые n строк текстового файла без копирования файла
  • Добавить новый символ строки в текстовый файл с помощью sed
  • Перевернутая команда хвоста?
  • Замените строку и замените ее частью
  • Как использовать sed для удаления всех, кроме определенных знаков препинания, в глобальном масштабе?
  • comm не доказывает ожидаемого результата
  • Interesting Posts

    сжимать логротат

    Как удалить библиотеку, которая не отображается для диспетчера пакетов?

    Анализ данных журнала и печать обратных ссылок регулярных выражений

    Удалил папку Windows.old, и теперь, когда я запускаю свой компьютер, GRUB больше не видит окна

    Как перечислить все файлы, которые не были созданы в четверг

    crash shell: любой способ проверить, успешно ли выполнена команда

    Удалить полную строку в текстовых файлах на основе тегов

    Как я могу определить, откуда происходят неправильные локальные результаты DNS?

    Кросс-компилировать любой пакет aptitude?

    Как установить инструменты программирования в корневой каталог, чтобы они могли использоваться пользователями, не являющимися администраторами?

    stdout пуст

    Как я могу запускать программу в качестве другого пользователя во всех отношениях?

    Как я могу поместить в конкретный каталог?

    Случайный файл отображается в разных каталогах. Как проследить ее создателя?

    Можно ли ограничить количество процессорных мощностей, которые может потребоваться процессу?

    Linux и Unix - лучшая ОС в мире.