【问题标题】:gzip -l returning incorrect values for uncompressed file sizegzip -l 返回未压缩文件大小的错误值
【发布时间】:2020-03-22 11:05:51
【问题描述】:

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

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

ubuntu 18.04.3 上的 gzip 1.6

【问题讨论】:

  • 我没有解析输出,只是查看控制台上的打印。无论如何,下面的答案解释了。

标签: linux gzip


【解决方案1】:

下面是 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

【讨论】:

  • 所以从技术上讲,如果我对这些文件有一致的压缩率(字符使用/分布基本相似),我可以通过查看压缩后的大小,乘以这个因子,并制作通过选择最近的 n*2^32+uncompressed 来准确
  • 这值得用压缩文件样本进行调查。它可能会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多