根据gz的规范,文件大小保存在.gz文件的最后4个字节中。
我已经创建了2个文件:
dd if=/dev/urandom of=500M bs=1024 count=500000
dd if=/dev/urandom of=5G bs=1024 count=5000000
我对它们进行了gzip压缩
gzip 500M 5G
我检查了最后4个字节
tail -c4 500M|od -I (returns 512000000 as expected)
tail -c4 5G|od -I (returns 825032704 as not expected)
似乎撞上了看不见的32位屏障,使写入ISIZE的值完全无意义。这比使用某些错误位更令人恼火。
有人知道一种在不解压缩的情况下从.gz文件中获取未压缩大小的方法吗?
谢谢。
规范:http://www.gzip.org/zlib/rfc-gzip.html 编辑: 如果有人想尝试,请使用/dev/zero而不是/dev/urandom。
dd seek=10G if=/dev/zero of=out.dat count=0
对于大多数文件系统来说更加方便。 - nodakai