为什么更改源文件的名称会影响其压缩版本的大小?

为什么更改源文件的名称会影响其压缩版本的大小?

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.rpmwps.rpm确实相同,并pigz -k wps*保证两个文件都是用相同的压缩参数压缩的。然而,两个生成的.gz文件在大小上略有不同。

这并没有给我带来任何问题。我只是好奇为什么会发生这种情况。我不太了解压缩,是不是因为文件的名称是压缩程序用来创建压缩文件内容的一种“元数据”?

谢谢!

答案1

看起来原始文件名正在输出中被编码。

-office-11.1.0.11664-1.x86_64大小差异为 29 个字节,根据我的计算,这与 29 个字符的纯文本相对应。

它可能将文件名与文件的校验和一起存储。校验和相同,但文件名相差 29 个字节。

答案2

压缩软件(在绝大多数情况下)在存档文件中存储一个小的标头,其中包含有关压缩存档中包含的每个文件/文件夹的信息。该信息通常包含原始文件名、文件属性/元数据(大小、日期/时间、权限等)和校验和。
由于您更改了文件名的长度,因此此标头的大小也会发生变化。
如果您重命名了文件,但保持文件名的长度相同,则生成的存档将具有相同的大小,但仍然不会具有完全相同的内容。
实际上:不做任何更改,但几分钟后进行第二次存档可能已经导致存档略有不同,因为在制作两次存档之间,标头中的日期/时间字段发生了变化。

相关内容