14

我正在尝试压缩包含 4 个大文件的文件夹的内容,非常非常相似。所以我希望尺寸会减小。

这是我在 linux/fedora 上使用的命令:

zip -9 myarchive.zip -r myfolder -P mypassword

我得到回应:

adding: myfolder/ (stored 0%)
adding: myfolder/Program1.exe (deflated 0%)
adding: myfolder/Program2.exe (deflated 0%)
adding: myfolder/Program3.exe (deflated 0%)
adding: myfolder/Program4.exe (deflated 0%)

然后我得到存档,它与我的原始文件夹大小大致相同。

似乎根本没有发生压缩。为什么?

4

4 回答 4

20

tar+不同gzipzip它为每个文件使用一个新的压缩表,因此即使四个文件相同,它也会尝试单独压缩每个文件。

从技术上讲,tar也可以看到每个文件,但它将它们串在一起形成一个长输入gzip,因此压缩步骤适用于一个巨大的输入,这就是为什么tar+gzip通常产生的结果小于zip.

问题是为什么您的exe文件无法压缩。exe文件通常包含大量易于压缩的数据,因此它们应缩小(“放气”)至少 30%。也许文件被加密或混淆了;这些过程使结果难以压缩。

于 2012-11-09T13:52:34.613 回答
5

Deflated 0% 表示它确实尝试压缩,但实际上没有压缩。如前所述,zip 格式不能利用不同条目之间的相似性。tar + gzip 可以,但即便如此,前提是相似之处最终彼此相距不到 32K 字节。其他格式可以利用更长距离的相似性,例如 xz。

未压缩的可执行文件压缩 30% 到 50% 是正常的,这意味着您的可执行文件要么是 a) 由类似UPX的东西压缩,b) 它们是自解压压缩数据,其中解压缩器存储在压缩数据之前, c) 它们是非常短的可执行文件,包含大量压缩数据,或者 d) 它们大多是加密的。

于 2012-11-09T15:51:43.427 回答
3

亚伦是对的。根据WikipediaZIP格式在归档之前会压缩,因此不同文件之间的相似性无助于压缩。

您真的要压缩.exe文件吗?不知何故,我怀疑那是您的实际文件类型。

请参阅http://en.wikipedia.org/wiki/ZIP_(file_format)#Advantages_and_disadvantages

于 2012-11-09T14:03:41.507 回答
2

有些文件不能被压缩,特别是当它们的熵很高时。当字节的统计分布是均匀的(例如,当字节 0 出现的频率与字节 1 和字节 2 一样...)时,就会发生这种情况。这发生在已经压缩的内容上。一些视频或音频格式属于该类别。

于 2012-11-09T13:35:03.920 回答