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
- 用Automator创build一个新的服务
- 在“Finder”中select“文件和文件夹”
- 添加一个“Shell脚本操作”
不需要的文件夹也可以通过以下方式删除:
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
实用程序(如unzip
和7z
,而不是Archive Utility,Unarchiver, unar
或dtrx
)不会创build在提取档案时,这些档案是包含文件的目录,这经常使文件难以find,并且如果同时提取多个这样的档案,则很难判断哪些档案属于哪个档案。
当您创build至less一个文件包含元数据(如扩展属性,文件标志或资源分支)的归档文件时,归档实用工具只会创build一个__MACOSX
目录。 __MACOSX
目录包含以._
开头的AppleDouble文件,这些文件用于存储OS X特定的元数据。 zip
命令行实用工具会丢弃扩展属性,文件标志和资源分支等元数据,这也意味着元数据(如标签)丢失,并且别名停止工作,因为别名文件中的信息存储在资源分支中。
通常情况下,您可以放弃OS X特定的元数据,但要查看包含哪些元数据文件,可以使用xattr -l
。 xattr
还包含资源分支和文件标志,因为即使它们实际上不是作为扩展属性存储的,也可以通过扩展属性接口进行访问。 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/\*