linux - 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
解决方案
下面是 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 -l
或gunzip -l
推荐阅读
- spring-boot - 在没有启动应用程序的情况下在 SpringBoot 中编写单元测试
- flutter - 在 Dart 中使用 await 和 return 有区别吗?
- javascript - 如何从异步函数中获取承诺的价值
- batch-file - 通过更改注册表设置启用 RDP 仅在之前已启用 RDP 多次的情况下才有效
- javascript - 如何将对象转换为数组?
- php - PHPExcel 日期格式
- javascript - 找不到打字稿模块(Vue)和意外的标记@Component
- r - 如何在字符串中查找模式并将其提取为数据框的新列
- debian - apt-get install 后未安装 Wireshark
- ionic-framework - 选择值相同时触发ionChange