为何修改源文件名会影响其压缩文件的大小?
为何修改源文件名会影响其压缩文件的大小?
哈哈,这个问题确实挺有意思的——明明两个文件内容完全一致(你用cksum验证过了),改个名字压缩后大小居然不一样,我刚接触压缩工具的时候也被这个小细节困惑过!
其实原因很简单:gzip(包括你用到的pigz,它是gzip的并行优化版本)以及用7zip创建的.gz格式压缩包,默认都会把源文件的元数据(比如文件名、最后修改时间)写入到压缩包的头部区域里。
你看你提供的终端输出里,两个源文件的修改时间是不一样的:
wps-office-11.1.0.11664-1.x86_64.rpm的修改时间是Jan 31 17:04- 复制后的
wps.rpm修改时间是Jan 31 17:05
再加上两个文件的文件名长度、内容完全不同,这些元数据的差异就会导致压缩包的总大小出现细微差别——毕竟元数据也是要占字节数的呀!
如果想验证这个结论,你可以试试用gzip -n(或者pigz -n)参数重新压缩这两个文件,这个参数的作用是禁止存储文件名和时间戳元数据,压缩后你会发现两个.gz文件的大小完全一致了!
至于7zip的情况,它在生成.gz格式文件时,默认同样会保留源文件的文件名等元数据,所以也会出现相同的现象。
简单来说:压缩包的大小不仅取决于源文件的内容,还包含了工具默认添加的一些元数据,这些元数据的差异就是导致你看到的大小不同的原因~
备注:内容来源于stack exchange,提问作者NoobAdmin




