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 КБ.

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

  • Используйте команду sed, чтобы проверить, существует ли конкретная строка, если нет, добавьте ее
  • Сценарий Bash для преобразования второго столбца в файл csv из Unix во время чтения / даты
  • Как добавить имя, дату и размер жесткого диска
  • Удаление столбцов, содержащих пробел в текстовом файле
  • Gedit отображает текст, но кот рассказывает другую историю
  • Как преобразовать шестнадцатеричные символы в обычные символы?
  • Удалить символ авторского права
  • кратные и текстовые столбцы
  • 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 выполняет заменяющее задание. Это больше .

    Interesting Posts

    Как настроить medit для отображения UTF-8?

    Как перенести существующую систему Linux в раздел LVM

    Кто будет использовать эту информацию для лучшей поддержки гибридной графики?

    Выполнение приложений сохраняется при закрытии (например, в Mac OS X) в Linux

    Есть ли способ удалить дубликаты, более совершенные, чем fdupes -rdN?

    Разделить имена файлов и переименовать

    inotify и rsync для большого количества файлов

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

    Что делает строка `set – $ args` и почему она ведет себя по-разному между Zsh и Bash?

    Почему некоторые скрипты нуждаются в постоянном повторном поиске во время debian init?

    Что такое директива ifcfg IPV4_FAILURE_FATAL и по каким сценариям я хочу ее использовать?

    Открытый ключ SSH не будет отправлен на сервер

    Несколько корневых опций в командной строке Linux

    Как добавить 100 пользователей из файла

    Что означают поля в строке зонда устройства libata в dmesg?

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