与GUI中创建的ZIP文件相比,使用GUI创建的ZIP文件具有更多的字节数


15

我创建了两个相同目录的ZIP文件。一个带有GUI,另一个带有:

$ zip -r alpha_cmd.zip Alpha

阿尔法目录是33.640 MB 164项。

GUI创建的ZIP文件比在命令行上创建的ZIP文件大2,100字节。

为什么使用GUI创建的ZIP文件更大?

注意:即使ZIP文件的大小不同,但解压缩后,每个目录的字节数也完全相同。基本上,我非常警惕使用GUI和shell命令管理文件系统所引起的不一致。


一个可能有隐形文件,另一个没有?
Tetsujin 2015年

从这个SU答案中尝试ditto -ck --rsrc --sequesterRsrc --keepParent folder folder.zip
user151019

@Mark我忘了回应。该“ ditto”命令的确创建与Finder完全相同的文件。而且ditto / zip /“ Finder ZIP”文件都是跨平台的。感谢您的时间和精力。
大卫,2015年

Answers:


20

从Finder中压缩会添加一个文件夹__MACOSX(在Mac上不可见),其中包含OS X资源叉,例如自定义图标等。从维基百科

资源派生是Apple Mac OS操作系统上文件的派生或部分,用于存储结构化数据以及数据派生中存储的非结构化数据。资源派生以特定形式存储信息,其中包含诸如图标位图,窗口的形状,菜单及其内容的定义以及应用程序代码(机器代码)之类的详细信息。例如,一个字处理文件可能将其文本存储在数据分支中,而将任何嵌入的图像存储在同一文件的资源分支中。资源叉主要由可执行文件使用,但是每个文件都可以具有资源叉。


6
较小的更正:不仅仅是资源派生,还包括zip格式无法原生处理的,以AppleDouble格式编码的所有文件元数据。这将包括聚光灯注释,标签,Finder标志,隔离数据等,以及资源派生。
高登·戴维森

我想知道大多数zip中的“ __MACOSX”文件夹是什么...您知道的更多吗?
大道

:这可能照亮回答另一个参考 stackoverflow.com/questions/107903/...
DA文森特

4

即使是这种情况下的主要原因(如empedocle所说,Finder添加了额外的隐藏内容),当大小差异只有百分之几时,相同数据ZIP的不同大小也不表示问题。

不同的ZIP实现可能具有不同的默认压缩级别(在CPU时间和节省的大小之间进行权衡),或者只是具有不同的代码来保存更多或更少的匹配项,在默认压缩级别上保存了更多或更少的字节。

例如,7-Zip通常.zip比其他ZIP程序生成更小的文件。(不,我不是在谈论它自己的.7z文件格式。它也具有更好的Plain-ZIP压缩器。)

zipcmp是可以比较ZIP文件的cmdline程序。默认情况下,仅比较ZIP目录,以检查所有文件的名称,大小和CRC是否相同。如果是这种情况,则几乎可以确定两个ZIP文件都具有相同的内容,但是只是以不同的方式压缩(如果压缩大小不同)。当然,只要不损坏ZIP文件即可。使用unzip -t foo.zip来测试减压的错误,不匹配的CRC等ZIP文件


__MACOSX文件夹不会影响CRC计算吗?
肯特

1
ZIP将每个压缩文件的未压缩内容存储在单独的CRC中。(所以不,原因有两个:目录仅包含其他文件,而不包含其自身的数据块。两个,存储在ZIP元数据中的CRC分别用于每个文件。)因此,所有文件之间的相同两个ZIP文件的CRC和解压缩后的大小将匹配。
彼得·科德斯

@PeterCordes不同的ZIP实现可以产生不同的文件大小这一事实引起了我的注意。我知道外壳程序执行了“ / usr / bin / zip”。但是由于Finder为我提供了不同的文件大小,因此我认为Finder使用了完全不同的可执行文件(这让我很沮丧)。如果我知道如何su root并有一些勇气,作为测试,我将“ / usr / bin / zip”移动到“ / tmp”,然后尝试使用Finder zip(最好发出错误)。但是,我正在努力做,不能冒险破坏Mac的稳定性!
大卫

临时替换/usr/bin/zip为其他版本的最安全方法是ln /usr/bin/zip /usr/bin/zip.standard; mv new_zip /usr/bin/zip。这样,您总会有一个/usr/bin/zip,因为您原子地替换了系统实现。另外,旧版本只是重命名,而不是移动到/tmp(可能会在其他文件系统上)。要禁用它,我只是将其重命名为zip.disab,看看Finder是否损坏,然后重命名。但是zip创建库功能很常见。Finder几乎可以肯定不会派生/执行/usr/bin/zip
彼得·科德斯

@PeterCordes我了解有关调用库而不是可执行文件的信息。但是,可执行文件本来应该是“ / usr / bin / ditto”,而不是“ / usr / bin / zip”。这个论坛的帮助很大。感谢您的时间和精力。
大卫,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.