У меня есть работа над пакетной системой, которая работает очень долго и производит тонны продукции. На самом деле так много, что мне нужно передать стандартный вывод через gzip, чтобы пакетный узел не заполнил свою рабочую область и впоследствии не вышел из строя.
longscript | gzip -9 > log.gz
Теперь я хотел бы изучить результаты работы, пока она еще выполняется. Итак, я делаю это:
gunzip log.gz
Это выполняется очень долго, так как это огромный файл (несколько ГБ). Я вижу выходной файл, созданный во время его работы, и могу посмотреть, как он создается.
tail log
> some-line-of-the-log-file
tail log
> some-other-line-of-the-log-file
Однако, в конечном итоге, gzip встречает конец файла gzip. Поскольку задание все еще выполняется, а gzip все еще записывает файл, правильного нижнего колонтитула пока нет, поэтому это происходит:
gzip: log.gz: unexpected end of file
После этого извлеченный файл журнала удаляется, так как gzip считает, что поврежденные извлеченные данные бесполезны для меня. Я, однако, не согласен - даже если последние несколько строк зашифрованы, вывод все еще очень интересен для меня.
Как я могу убедить gzip оставить мне «поврежденный» файл?
gunzip -c
записывает вывод в stdout ... может быть, это то, что вы ищете? Сохраняет оригинал без изменений.Ответы:
Помимо самого конца файла, вы сможете увидеть несжатые данные с помощью
zcat
(илиgzip -dc
, илиgunzip -c
):или
или
gzip
будет выполнять буферизацию по очевидным причинам (необходимо сжать данные в виде фрагментов), поэтому, даже если программа может вывести некоторые данные, эти данные могут еще не быть вlog.gz
файле.Вы также можете хранить несжатый журнал с
... но это было бы глупо, потому что, очевидно, есть причина, по которой вы сжимаете выходной файл.
источник
gunzip < log.gz
вместоzcat log.gz
систем, гдеzcat
работает только в.Z
файлах.Если я правильно понимаю, вы хотели бы сделать что-то похожее
tail -f
на все еще растущий файл gzip: я разработал gztool, который может сделать это (среди прочего):и он будет постоянно выводить на консоль, ожидая новых данных, когда это необходимо.
Обратите внимание, что
gztool
также будет создан индексный файл (log.gzi
в данном случае), который будет делать последующие хвосты или другие случайные обращения к данным gzipgztool
практически мгновенно. Если вы не хотите создавать индекс (даже если он равен 0,3% / gzip и не увеличивают время обработки), вы можете использовать его,-W
чтобы не создавать.источник
Вы можете попробовать разделить файл и сжать каждый из них: https://stackoverflow.com/a/2016918/3090950
Во всяком случае, вы могли бы запустить команду в подробном режиме? Это предоставит вам больше информации.
источник