gzip
在CentOS 7上使用,我只是将一个源文件压缩成一个.gz
文件,然后我发现源文件的名字错了,所以我改了源文件的名字并再次压缩,有趣的是新.gz
文件的大小与旧文件略有不同。
7zip
我再次在 Windows 10 和AlmaLinux 8 上进行了测试pigz
,结果总是出现相同的情况。以下是 AlmaLinux 8 的终端输出:
[user@localhost compress-test]$ ll
total 402152
-rwxrwx---. 1 user user 411801616 Jan 31 17:04 wps-office-11.1.0.11664-1.x86_64.rpm
[user@localhost compress-test]$
[user@localhost compress-test]$ cp wps-office-11.1.0.11664-1.x86_64.rpm wps.rpm
[user@localhost compress-test]$
[user@localhost compress-test]$ ll
total 804304
-rwxrwx---. 1 user user 411801616 Jan 31 17:04 wps-office-11.1.0.11664-1.x86_64.rpm
-rwxrwx---. 1 user user 411801616 Jan 31 17:05 wps.rpm
[user@localhost compress-test]$
[user@localhost compress-test]$ pigz -k wps*
[user@localhost compress-test]$
[user@localhost compress-test]$ ll
total 1605744
-rwxrwx---. 1 user user 411801616 Jan 31 17:04 wps-office-11.1.0.11664-1.x86_64.rpm
-rwxrwx---. 1 user user 410333369 Jan 31 17:04 wps-office-11.1.0.11664-1.x86_64.rpm.gz
-rwxrwx---. 1 user user 411801616 Jan 31 17:05 wps.rpm
-rwxrwx---. 1 user user 410333340 Jan 31 17:05 wps.rpm.gz
[user@localhost compress-test]$
[user@localhost compress-test]$ cksum *.rpm
3981101647 411801616 wps-office-11.1.0.11664-1.x86_64.rpm
3981101647 411801616 wps.rpm
[user@localhost compress-test]$
结果cksum
证明wps-office-11.1.0.11664-1.x86_64.rpm
和wps.rpm
确实相同,并pigz -k wps*
保证两个文件都是用相同的压缩参数压缩的。然而,两个生成的.gz
文件在大小上略有不同。
这并没有给我带来任何问题。我只是好奇为什么会发生这种情况。我不太了解压缩,是不是因为文件的名称是压缩程序用来创建压缩文件内容的一种“元数据”?
谢谢!
答案1
看起来原始文件名正在输出中被编码。
-office-11.1.0.11664-1.x86_64
大小差异为 29 个字节,根据我的计算,这与 29 个字符的纯文本相对应。
它可能将文件名与文件的校验和一起存储。校验和相同,但文件名相差 29 个字节。
答案2
压缩软件(在绝大多数情况下)在存档文件中存储一个小的标头,其中包含有关压缩存档中包含的每个文件/文件夹的信息。该信息通常包含原始文件名、文件属性/元数据(大小、日期/时间、权限等)和校验和。
由于您更改了文件名的长度,因此此标头的大小也会发生变化。
如果您重命名了文件,但保持文件名的长度相同,则生成的存档将具有相同的大小,但仍然不会具有完全相同的内容。
实际上:不做任何更改,但几分钟后进行第二次存档可能已经导致存档略有不同,因为在制作两次存档之间,标头中的日期/时间字段发生了变化。