首页 > 解决方案 > gzip -l 返回未压缩文件大小的错误值

问题描述

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

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

ubuntu 18.04.3 上的 gzip 1.6

标签: linuxgzip

解决方案


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

     ISIZE (Input SIZE)
        This contains the size of the original (uncompressed) input
        data modulo 2^32.

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

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


推荐阅读