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-архива с несколькими файлами обычно должен быть одним каталогом, потому что если это не так, некоторые утилиты для разархивирования (например, unzip7z утилиты для и , но не утилита архивирования, Unarchiver unar, илиdtrx ) не создают каталог, содержащий для файлы при извлечении архива, что часто затрудняет поиск файлов, и если несколько подобных архивов извлекаются одновременно, может быть трудно определить, какие файлы принадлежат какому архиву.
Утилита архивирования создает __MACOSXкаталог только при создании архива, в котором хотя бы один файл содержит метаданные, такие как расширенные атрибуты, флаги файлов или ветвь ресурса. __MACOSXКаталог содержит AppleDouble файлов, имя файла начинается с ._, которые используются для хранения OS X специфичных метаданных. В zipутилите командной строка отбрасывает метаданные , такие как расширенные атрибуты, флаги файлов, вилок и ресурсов, что также означает , что метаданные , такие как метка теряется, и что псевдонимы перестать работать, потому что информация в файле псевдонимы хранится в ветви ресурсов.
Обычно вы можете просто отбросить специфичные для OS X метаданные, но чтобы увидеть, какие файлы метаданных содержат, вы можете использовать xattr -l. xattrтакже включает в себя ветки ресурсов и файловые флаги, потому что даже если они на самом деле не хранятся как расширенные атрибуты, к ним можно получить доступ через интерфейс расширенных атрибутов. Утилита архивирования и утилита zipкомандной строки отбрасывают списки ACL.