gzip: final inesperado do arquivo com - como ler o arquivo de qualquer maneira

5

Eu tenho um trabalho em um sistema em lotes que executa extremamente longo e produz toneladas de saída. Tanto que, na verdade, tenho que canalizar a saída padrão por meio do gzip para impedir que o nó do lote preencha sua área de trabalho e, subsequentemente, quebre.

longscript | gzip -9 > log.gz

Agora, gostaria de investigar a saída do trabalho enquanto ele ainda está em execução. Então eu faço isso:

gunzip log.gz

Isso é muito longo, pois é um arquivo enorme (vários GB). Eu posso ver o arquivo de saída que está sendo criado enquanto ele está sendo executado e posso examiná-lo enquanto ele está sendo construído.

tail log
> some-line-of-the-log-file
tail log
> some-other-line-of-the-log-file

No entanto, no final das contas, o gzip encontra o final do arquivo gzipado. Como o trabalho ainda está em execução e o gzip ainda está gravando o arquivo, ainda não há um rodapé adequado, então isso acontece:

gzip: log.gz: unexpected end of file

Depois disso, o arquivo de log extraído é excluído, pois o gzip acha que os dados extraídos corrompidos não são úteis para mim. Eu, no entanto, discordo - mesmo que as duas últimas linhas estejam embaralhadas, a saída ainda é muito interessante para mim.

Como posso convencer o gzip a deixar-me manter o arquivo "corrompido"?

    
por carsten 12.04.2017 / 17:31

2 respostas

3

Além do final do arquivo, você poderá ver os dados descompactados com zcat (ou gzip -dc ou gunzip -c ):

zcat log.gz | tail

ou

zcat log.gz | less

ou

zless log.gz

gzip fará o armazenamento em buffer por razões óbvias (ele precisa compactar os dados em partes), portanto, mesmo que o programa tenha gerado alguns dados, esses dados podem ainda não estar no arquivo log.gz .

Você também pode armazenar o log descompactado com

zcat log.gz > log

... mas isso seria bobo, já que obviamente há uma razão pela qual você comprime a saída em primeiro lugar.

    
por 16.08.2017 / 13:31
0

Você pode tentar dividir o arquivo e gzipar cada um deles: link

De qualquer forma, você poderia executar o comando no modo detalhado? Isso fornecerá mais informações.

    
por 12.04.2017 / 17:43

Tags