Почему я получаю неожиданный конец файла в моем скрипте при использовании gzip?

У меня есть одно сомнение в этом:

for i in ./*.gz do gunzip -c $i | head -8000 | gzip > $(basename $i) done 

Я получаю ошибку «неожиданный конец файла» для gzip, и я не получаю 8000 вообще, всего несколько десятков строк. Я проверил целостность моих файлов, и они в порядке. Любопытно, если я запускаю отдельные файлы:

 gunzip -c file1.gz | head -8000 | gzip > file1.gz 

Я получаю ожидаемый результат. С помощью этого сценария я могу получить первые 8000 строк из сжатого файла с линиями 10708712 и снова сжать. Новый файл перезаписывает исходный файл, но все в порядке.

  • Как планировать выполнение задачи cron
  • BASH | Отчет формата CSV
  • как проверить, используется ли таблица mysql или приложение обращается к таблице в сценарии оболочки?
  • Как передать параметры 4..99 на другую функцию
  • Мне нужно сделать файл undeleteable, но разрешить его модификацию и переименование
  • Гибридный код в сценариях оболочки. Обмен переменными
  • Условие скрипта Bash всегда передается, даже когда grep не должен возвращать ничего
  • Решение целочисленного выражения ожидается
  • One Solution collect form web for “Почему я получаю неожиданный конец файла в моем скрипте при использовании gzip?”

    Вы должны записать вывод во временный файл, а затем переименовать:

     for i in ./*.gz do gunzip -c "$i" | head -8000 | gzip > "$i.tmp" mv -f "$i.tmp" $(basename "$i") done 

    Иногда ваша версия работает, если вы достаточно gunzip буферов во время чтения.

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