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

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

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

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

  • Выполнение скрипта на удаленном сервере, содержащемся на стороне клиента
  • Как выполнять команды в пакетном режиме по ssh?
  • tar: Удаление имени `/ 'из имен участников
  • Как выполнить повторяющийся сценарий Bash в определенное время?
  • Как я могу отменить неправильный gzip?
  • gzip - перенаправление или трубопроводы?
  •  gunzip -c file1.gz | head -8000 | gzip > file1.gz 

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

  • TAR: лучше пропустить каталог или использовать split
  • Выполнить скрипт оболочки из php, как пользователь root?
  • Я хочу разделить сумму чисел на значение
  • unpigz (и untar) в определенный каталог
  • Как программно контролировать пересылаемые приложения X11?
  • vim: выполнить BundleInstall без отображения интерфейса vim
  • 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 - лучшая ОС в мире.