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, але не Архівні програми, Unarchiver unarабоdtrx ), не створюють каталог, що містить файли, коли архів витягується, що часто ускладнює пошук файлів, і якщо кілька подібних архівів одночасно витягуються, може бути важко сказати, які файли належать до якого архіву.
Archive Utility створює __MACOSXкаталог лише тоді, коли ви створюєте архів, де принаймні один файл містить метадані, такі як розширені атрибути, прапорці файлів або вилка ресурсу. __MACOSXКаталог містить AppleDouble файлів, ім'я файлу починається з ._, які використовуються для зберігання OS X специфічних метаданих. В zipутиліті командного рядок відкидає метадані , такі як розширені атрибути, прапори файлів, вилок і ресурсів, що також означає , що метадані , такі як мітка втрачається, і що псевдоніми перестати працювати, тому що інформація у файлі псевдоніми зберігається в гілці ресурсів.
Зазвичай ви можете просто відкинути метадані, характерні для ОС X, але, щоб побачити, що містять файли метаданих, ви можете використовувати xattr -l. xattrтакож включає вилки ресурсів та прапори файлів, оскільки, хоча вони фактично не зберігаються як розширені атрибути, до них можна отримати доступ через розширений інтерфейс атрибутів. Як утиліта архіву, так і утиліта zipкомандного рядка відкидають ACL.