gzip -l返回未压缩文件大小的值不正确

5

我想快速评估gzip文件的行号。我的方法是检查文件的未压缩大小,从文件开头采样100行(例如使用zcat filename | head -n 100 ),并将未压缩大小除以这100行的平均行大小。

问题在于,我从gzip -l获得的数据是无效的。大多数情况下,未压缩大小过小,在某些情况下产生负压缩值。例如,在一个案例中,压缩文件大小为1.8gb,而gzip -l列出的未压缩大小为0.7gb,但解压后实际上为9gb。我尝试过解压和重新压缩,但仍然得到相同的未压缩大小。

系统环境:Ubuntu 18.04.3,gzip版本为1.6。


我并没有解析输出,只是看控制台上的打印信息。无论如何,下面的回答有解释。 - Caharpuka
1个回答

9
以下是gzip规范(RFC 1952)的一部分,它定义了未压缩大小在gzip文件中的存储方式。
ISIZE (Input SIZE)
    This contains the size of the original (uncompressed) input
    data modulo 2^32.

你正在处理一个gzip压缩文件,其未压缩大小大于2^32,因此gzip -l报告的未压缩大小总是不正确。

请注意,gzip文件格式的这种设计限制不会在解压缩存档时造成任何问题。仅影响gzip -lgunzip -l命令的使用。


1
所以从技术上讲,如果这些文件的压缩率保持一致(字符使用/分布基本相似),我可以通过查看压缩后的大小并乘以此因子来估计大小,并通过选择最接近的n * 2 ^ 32 +未压缩大小使其准确。 - Caharpuka
这值得用一些压缩文件的样本来调查。这可能有效。 - pmqs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接