zip缩小0%?为什么没有压缩?

Joh*_*nal 9 unix linux compression zip command

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

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

zip -9 myarchive.zip -r myfolder -P mypassword
Run Code Online (Sandbox Code Playgroud)

我收到了回复:

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%)
Run Code Online (Sandbox Code Playgroud)

然后我得到了存档,这与我的原始文件夹大小相同.

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

Aar*_*lla 14

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

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

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


Mar*_*ler 5

放气 0% 意味着它确实尝试过压缩,但实际上没有压缩。如前所述,zip 格式无法利用不同条目之间的相似性。tar + gzip 可以,但即使如此,也只有在相似之处最终彼此之间的距离小于 32K 字节时。其他格式可以利用更长距离的相似性,例如 xz。

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