gzip -l 返回未压缩文件大小的错误值

Cah*_*uka 5 linux gzip

我正在尝试快速评估 gzip 压缩文件的行数。为此,我检查文件的未压缩大小,从文件开头使用zcat filename | head -n 100(例如)对行进行采样,然后将未压缩大小除以该 100 行样本的平均行大小。

问题是我从 gzip -l 收到的数据无效。大多数情况下,未压缩的大小似乎太小,在某些情况下会产生负压缩值。例如,在一种情况下,压缩文件为 1.8gb,gzip -l 将未压缩的文件列为 0.7gb,而解压后实际为 9gb。我尝试解压缩并重新压缩,但仍然得到相同的未压缩大小。

ubuntu 18.04.3 上的 gzip 1.6

pmq*_*mqs 9

以下是 gzip 规范 ( RFC 1952 )的一部分,其中定义了未压缩大小如何存储在 gzip 文件中。

ISIZE (Input SIZE)
    This contains the size of the original (uncompressed) input
    data modulo 2^32.
Run Code Online (Sandbox Code Playgroud)

您正在使用 gzip 存档,其中未压缩的大小 > 2^32,因此报告的未压缩的大小gzip -l总是正确的。

请注意,gzip 文件格式的这种设计限制在解压缩存档时不会导致任何问题。唯一的影响是与gzip -lgunzip -l