Mac压缩包没有__MACOSX文件夹?

当我在Mac OSX中使用内置压缩压缩器压缩文件时,会在提取的压缩文件中创build一个名为“__MACOSX”的额外文件夹。

我可以调整我的设置以防止创build该文件夹,或者是否需要购买第三方压缩工具?

更新 :我刚刚发现了一个免费的OSX解决我的问题的应用程序:“ YemuZip ”

当我遇到这个问题时,我已经从命令行完成了:

zip file.zip uncompressed

编辑后,许多downvotes:我前一段时间使用这个选项,我不知道我在哪里学到的,所以我不能给你一个更好的解释。 克里斯·约翰逊的回答是正确的,但我不会删除我的。 正如一个评论所说的,OP所要求的更准确,因为它不使用这些文件进行压缩,而是将其从压缩文件中删除。 我也觉得更容易记住。

可以通过zip -d filename.zip __MACOSX/\*

确定后,在这个自己find这个解决scheme,从terminal:

 zip -r -X Archive.zip * 

其中-X表示:排除不可见的Mac资源文件,如“_MACOSX”或“._ Filename”和.ds存储文件

资源

这个命令为我做了:

 zip -r Target.zip Source -x "*.DS_Store" 

Target.zip是要创build的zip文件。 Source是要压缩的源文件/文件夹。 _x参数指定不包含的文件/文件夹。 如果上述内容不pipe用于什么原因,请尝试下面的内容:

 zip -r Target.zip Source -x "*.DS_Store" -x "__MACOSX" 

我正在使用这个Automator Shell脚本来修复它。 它显示为上下文菜单项(右键单击Finder中显示的任何文件)。

 while read -rp; do zip -d "$p" __MACOSX/\* zip -d "$p" \*/.DS_Store done 
  1. 用Automator创build一个新的服务
  2. 在“Finder”中select“文件和文件夹”
  3. 添加一个“Shell脚本操作”

automator shell脚本

Finder中的上下文菜单项

不需要的文件夹也可以通过以下方式删除:

 zip -d filename.zip "__MACOSX*" 

最适合我

zip命令行实用程序从不创build__MACOSX目录,因此您可以像这样运行命令:

 zip directory.zip -x \*.DS_Store -r directory 

在下面的输出中,我使用zip命令行实用程序创build的__MACOSX不包含__MACOSX目录,但是我从Finder创builda 2.zip却包含__MACOSX目录。

 $ touch a $ xattr -w somekey somevalue a $ zip a.zip a adding: a (stored 0%) $ unzip -l a.zip Archive: a.zip Length Date Time Name -------- ---- ---- ---- 0 01-02-16 20:29 a -------- ------- 0 1 file $ unzip -la\ 2.zip # I created `a 2.zip` from Finder before this Archive: a 2.zip Length Date Time Name -------- ---- ---- ---- 0 01-02-16 20:29 a 0 01-02-16 20:31 __MACOSX/ 149 01-02-16 20:29 __MACOSX/._a -------- ------- 149 3 files 

-x .DS_Store不排除目录内的.DS_Store文件,而是排除-x \*.DS_Store

一个zip文件的顶层文件应该包含多个文件,因为如果不是这样的话,一些unar实用程序(如unzip7z ,而不是Archive Utility,Unarchiver, unardtrx )不会创build在提取档案时,这些档案是包含文件的目录,这经常使文件难以find,并且如果同时提取多个这样的档案,则很难判断哪些档案属于哪个档案。

当您创build至less一个文件包含元数据(如扩展属性,文件标志或资源分支)的归档文件时,归档实用工具只会创build一个__MACOSX目录。 __MACOSX目录包含以._开头的AppleDouble文件,这些文件用于存储OS X特定的元数据。 zip命令行实用工具会丢弃扩展属性,文件标志和资源分支等元数据,这也意味着元数据(如标签)丢失,并且别名停止工作,因为别名文件中的信息存储在资源分支中。

通常情况下,您可以放弃OS X特定的元数据,但要查看包含哪些元数据文件,可以使用xattr -lxattr还包含资源分支和文件标志,因为即使它们实际上不是作为扩展属性存储的,也可以通过扩展属性接口进行访问。 Archive Utility和zip命令行实用程序都会放弃ACL。

你是指zip命令行工具还是Finder的压缩命令?

对于zip ,你可以尝试--data-fork选项。 如果没有这样做,你可能会尝试--no-extra ,虽然这似乎忽略其他文件元数据可能是有价值的,如uid / gid和文件时间。

对于Finder的压缩命令,我不认为有任何控制其行为的选项。 这是为了简单的情况。

另一个工具,也许Finder实际上在引擎盖下使用的工具是ditto 。 使用-c -k选项,它会创buildzip压缩文件。 有了这个工具,你可以尝试使用--norsrc ,– --noextattr ,– --noqtn ,– --noacl和/或者简单的--sequesterRsrc选项(根据手册页, --sequesterRsrc选项可能会负责__MACOSX子目录)。 虽然--sequesterRsrc可能不存在, --sequesterRsrc仅仅意味着使用AppleDouble格式,它将在整个地方创build._文件而不是一个__MACOSX目录。

不要压缩任何隐藏的文件:

 zip newzipname filename.any -x "\.*" 

有了这个问题,应该是这样的:

 zip newzipname filename.any -x "\__MACOSX" 

但是,必须说的是,zip命令在terminal中运行,只是压缩文件,而不压缩任何其他文件。 所以这样做的结果是一样的:

 zip newzipname filename.any 

你不能。

但是你可以做的是压缩后删除这些不需要的文件夹。 命令行zip采用不同的参数,其中一个-d用于删除基于正则expression式的内容。 所以你可以像这样使用它:

 zip -d filename.zip __MACOSX/\*