该zip
命令行实用程序绝不会创建一个__MACOSX
目录,这样你就可以运行如下命令:
zip directory.zip -x \*.DS_Store -r directory
在下面的输出中,a.zip
我使用zip
命令行实用程序创建的__MACOSX
目录不包含目录,但是a 2.zip
从Finder创建的目录包含目录。
$ 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
目录中的文件,但-x \*.DS_Store
会排除。
包含多个文件的zip归档文件的顶级文件通常应位于一个目录中,因为如果不是,则某些未归档实用程序(例如unzip
和和7z
,但不是Archive Utility,The Unarchiver unar
或dtrx
)不会为该目录创建包含目录。提取存档文件时,通常会导致文件查找困难,并且如果同时提取多个这样的存档文件,则很难判断哪些文件属于哪个存档文件。
存档实用程序仅__MACOSX
在创建存档时创建目录,其中至少一个文件包含元数据,例如扩展属性,文件标志或资源派生。该__MACOSX
目录包含以文件名开头的AppleDouble文件,这些文件._
用于存储OS X特定的元数据。该zip
命令行实用程序丢弃元数据,诸如扩展属性,文件标志和资源叉,这也意味着元数据如标签丢失,并且别名停止工作,因为在一个别名文件中的信息被存储在资源派生。
通常,您可以只丢弃OS X特定的元数据,但是可以使用查看要包含的元数据文件xattr -l
。xattr
还包括资源派生和文件标志,因为即使它们实际上并没有存储为扩展属性,也可以通过扩展属性接口进行访问。存档实用程序和zip
命令行实用程序均丢弃ACL。