Gzip

gzip:文件意外結束 - 無論如何如何讀取文件

  • December 18, 2019

我在批處理系統上有一份工作,該系統執行時間極長並產生大量輸出。實際上,我必須通過 gzip 傳輸標準輸出,以防止批處理節點填充其工作區並隨後崩潰。

longscript | gzip -9 > log.gz

現在,我想調查仍在執行的作業的輸出。所以我這樣做:

gunzip log.gz

這執行時間很長,因為它是一個巨大的文件(幾 GB)。我可以在執行時看到正在創建的輸出文件,並且可以在建構時查看它。

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 讓我保留“損壞”的文件?

除了文件的最後,您還可以使用zcat(或gzip -dc,或gunzip -c)查看未壓縮的數據:

zcat log.gz | tail

或者

zcat log.gz | less

或者

zless log.gz

gzip出於明顯的原因會進行緩衝(它需要將數據壓縮成塊),因此即使程序可能已經輸出了一些數據,該數據可能還沒有在log.gz文件中。

您還可以將未壓縮的日誌儲存為

zcat log.gz > log

…但這很愚蠢,因為您首先壓縮輸出顯然是有原因的。

引用自:https://unix.stackexchange.com/questions/358587