当我用Mac OSX中内置的zip压缩器压缩文件时,它会在提取的zip中创建一个名为“__MACOSX”的额外文件夹。
我是否可以调整我的设置以避免创建此文件夹,或者我是否需要购买第三方压缩工具?
更新:我刚刚发现了一个OSX的免费应用程序,解决了我的问题:“YemuZip”
更新2:YemuZip不再是免费软件。
当我用Mac OSX中内置的zip压缩器压缩文件时,它会在提取的zip中创建一个名为“__MACOSX”的额外文件夹。
我是否可以调整我的设置以避免创建此文件夹,或者我是否需要购买第三方压缩工具?
更新:我刚刚发现了一个OSX的免费应用程序,解决了我的问题:“YemuZip”
更新2:YemuZip不再是免费软件。
当前回答
zip命令行工具永远不会创建__MACOSX目录,所以你可以像这样运行一个命令:
zip directory.zip -x \*.DS_Store -r directory
在下面的输出中,我用zip命令行工具创建的a.s zip不包含__MACOSX目录,但我从Finder创建的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 -l a\ 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文件。DS_Store。
顶级的zip归档文件多个文件通常应该一个目录,因为如果不是这样,一些unarchiving公用工程(解压缩和7 z,但不是档案效用,Unarchiver, unar,或dtrx)不包含目录创建一个文件档案提取时,通常很难找到的文件,如果多个这样的档案提取的同时,很难告诉哪些文件属于哪个档案。
Archive Utility only creates a __MACOSX directory when you create an archive where at least one file contains metadata such as extended attributes, file flags, or a resource fork. The __MACOSX directory contains AppleDouble files whose filename starts with ._ that are used to store OS X-specific metadata. The zip command line utility discards metadata such as extended attributes, file flags, and resource forks, which also means that metadata such as tags is lost, and that aliases stop working, because the information in an alias file is stored in a resource fork.
通常,您可以丢弃特定于OS x的元数据,但要查看元数据文件包含什么,可以使用xattr -l。Xattr还包括资源叉和文件标志,因为即使它们实际上没有作为扩展属性存储,也可以通过扩展属性接口访问它们。Archive实用程序和zip命令行实用程序都会丢弃acl。
其他回答
在阅读了所有现有的答案后,我有一个更好的解决方案。所有的事情都可以通过一个简单的右键点击工作流来完成。 没有额外的软件,没有复杂的命令行,没有shell技巧。
自动化工作流程:
输入:来自任何应用程序的文件或文件夹。 步骤1:创建Archive,系统内置默认参数。 步骤2:运行Shell命令,输入为参数。复制下面的命令。 zip -d "$@" "__MACOSX/*" || true Zip -d "$@" "*/。DS_Store" || true
保存它,我们就完成了!只需右击文件夹或大量文件,并从服务菜单中选择工作流。将同时创建没有元数据的存档。
图片更新:当我创建一个新的工作流时,我选择了“快速行动”-这里是一个英文版的截图:
当我遇到这个问题时,我已经从命令行完成了:
zip file.zip uncompressed
编辑,在许多反对票后:我使用这个选项一段时间前,我不知道我从哪里学到的,所以我不能给你一个更好的解释。克里斯·约翰逊的答案是正确的,但我不会删除我的。正如一个评论所说,它更准确地反映了OP的要求,因为它在没有这些文件的情况下进行压缩,而不是从压缩文件中删除它们。我发现它也更容易记住。
另一个可以与Automator工具一起使用的shell脚本(参见benedikt关于如何创建脚本的回答)是:
while read -r f; do
d="$(dirname "$f")"
n="$(basename "$f")"
cd "$d"
zip "$n.zip" -x \*.DS_Store -r "$n"
done
不同之处在于,这段代码直接压缩选定的文件夹,而不包含macOS特定的文件(而不是先压缩后删除)。
这是我在使用tar命令压缩文件时避免__MACOSX目录的方法:
$ CD dir-you-want-to-archive $ find。| xargs xattr - l# <-列出所有具有特殊xattr属性的文件 ... ./conf/clamav: com.apple.quarantine: 0083;5a9018b1 ./conf/global: com.apple.quarantine: 0083;5a9018b1;Safari ./conf/web_server: com.apple.quarantine: 0083;5a9018b1
先删除属性:
找到。|xargs xattr -d com.apple.quarantine
运行find。| xargs xattr -l,确保没有任何文件具有xattr属性。然后你就可以开始了:
你是水手bz2你
你不能。
但是你能做的就是在压缩后删除那些不需要的文件夹。命令行zip接受不同的参数,其中-d用于根据正则表达式删除内容。所以你可以这样使用它:
zip -d filename.zip __MACOSX/\*