2012-11-09 46 views
7

我想压缩包含4个大文件的文件夹的内容,非常非常相似。所以我希望减小尺寸。拉链瘪0%?为什么不压缩?

下面是我使用的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

当你省略'-P mypassword'时会发生什么? –

+2

并非所有数据都可以压缩。 –

+0

当我省略-P mypassword时,它是一样的。 –

回答

7

不像tar + gzipzip采用了新的压缩表中的每个文件,这样即使四个文件是相同的,它会尝试单独压缩每个。

技术上,tar也看到每个文件,但它一起弦乐器他们进入一个漫长输入gzip,所以压缩步骤适用于一个巨大的输入这就是为什么tar + gzip通常会产生比zip更小的结果。

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

+0

谢谢,这是有道理的,如果压缩单独压缩每个文件。这些文件是可自解压的exe文件,它们包含一个小的可执行文件+一个大的压缩的dll文件库+一些图片。图像和库已经被压缩并且对于每个文件几乎相同。 –

2

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

+0

我认为每个文件都有很高的熵值,但它们非常相似。两个给定文件之间的差异可能小于1%。所以考虑整个文件夹时有很多冗余。 –

+0

“放气0%”是什么意思?我忘了在原帖中提问。谢谢你的帮助。 –

2

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

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

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

+0

感谢您的意见和链接。是的,我的文件是可自解压的exe文件(请参阅我对Aaron的回复)。谢谢你的时间! –

2

瘪了0%表示它试图压缩,但实际上没有压缩。如上所述,zip格式不能利用不同条目之间的相似性。 tar + gzip可以,但即使如此,只要相似性最终相距不到32K字节。其他格式可以利用更长的距离相似性,如xz。

是正常的未压缩的可执行文件由30%压缩到50%,这意味着你的可执行文件或a)由类似UPX压缩,b)中它们是自解压的压缩数据,其中,所述解压缩器预先存储的压缩数据,c)它们是非常短的可执行文件,具有大量的压缩数据,或者d)它们大多被加密。

相关问题