O ziputilitário de linha de comando nunca cria um __MACOSXdiretório; portanto, você pode simplesmente executar um comando como este:
zip directory.zip -x \*.DS_Store -r directory
Na saída abaixo, a.zipque eu criei com o ziputilitário de linha de comando não contém um __MACOSXdiretório, mas a 2.zipque eu criei no 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_Storenão exclui .DS_Storearquivos dentro de diretórios, mas -x \*.DS_Storesim.
O arquivo de nível superior de um archive zip com vários arquivos geralmente deve ser um diretório único, porque, caso contrário, alguns utilitários de desarquivamento (como unzipe 7z, mas não o Archive Utility, The Unarchiver unaroudtrx ) não criam um diretório que contenha o arquivos quando o arquivo é extraído, o que geralmente dificulta a localização dos arquivos e, se vários arquivos como esse são extraídos ao mesmo tempo, pode ser difícil dizer quais arquivos pertencem a qual arquivo.
O Utilitário de arquivamento cria apenas um __MACOSXdiretório quando você cria um arquivamento em que pelo menos um arquivo contém metadados, como atributos estendidos, sinalizadores de arquivo ou uma bifurcação de recursos. O __MACOSXdiretório contém arquivos AppleDouble cujo nome de arquivo é iniciado e ._são usados para armazenar metadados específicos do OS X. O ziputilitário de linha de comando descarta metadados, como atributos estendidos, sinalizadores de arquivo e bifurcações de recursos, o que também significa que os metadados, como tags, são perdidos e que os alias param de funcionar, porque as informações em um arquivo de alias são armazenadas em uma bifurcação de recursos.
Normalmente, você pode simplesmente descartar os metadados específicos do OS X, mas para ver o que os arquivos de metadados contêm, você pode usá-lo xattr -l. xattrtambém inclui bifurcações de recursos e sinalizadores de arquivo, porque, embora não sejam realmente armazenados como atributos estendidos, eles podem ser acessados através da interface de atributos estendidos. O Archive Utility e o ziputilitário de linha de comando descartam ACLs.