我正在尝试压缩包含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%)
然后我得到了存档,这与我原始文件夹的大小差不多。
似乎根本没有发生压缩。为什么呢?
答案 0 :(得分:10)
与tar
+ gzip
不同,zip
为每个文件使用新的压缩表,因此即使这四个文件相同,也会尝试单独压缩每个文件。
从技术上讲,tar
也会看到每个文件,但它会将它们组合成一个gzip
的长输入,因此压缩步骤适用于一个巨大的输入,这就是为什么tar
+ {{ 1}}通常会产生比gzip
更小的结果。
问题是无法压缩zip
个文件的原因。 exe
文件通常包含大量易于压缩的数据,因此它们应该缩小(“缩小”)至少30%。也许文件是加密或混淆的;这些过程使得结果难以压缩。
答案 1 :(得分:3)
亚伦是对的。根据{{1}},Wikipedia
格式在归档之前会进行压缩,因此不同文件之间的相似性无助于压缩。
您是否真的想压缩ZIP
个文件?不知何故,我怀疑这是你的实际文件类型。
请参阅http://en.wikipedia.org/wiki/ZIP_(file_format)#Advantages_and_disadvantages。
答案 2 :(得分:3)
缩小0%意味着它确实尝试压缩,但实际上没有压缩。如上所述,zip格式不能利用不同条目之间的相似性。 tar + gzip可以,但即使这样,只有相似之处最终相互之间的距离小于32K字节。其他格式可以利用更长距离的相似性,例如xz。
未压缩的可执行文件压缩30%到50%是正常的,这意味着您的可执行文件要么a)被UPX压缩,b)它们是自解压缩的压缩数据,其中解压缩器存储在压缩数据之前,c)它们是具有大量压缩数据的非常短的可执行文件,或者d)它们大多是加密的。
答案 3 :(得分:2)
某些文件无法压缩,特别是如果它们的熵很高。当字节的统计分布是偶数时(例如,当字节0与字节1一样出现时,字节2出现...),就会发生这种情况。对于已压缩的内容会发生这种情某些视频或音频格式属于该类别。