Mac zip compressé sans le dossier __MACOSX?

Lorsque je compresse des fichiers avec le compresseur zip intégré dans Mac OSX, il en résulte un dossier supplémentaire intitulé “__MACOSX” créé dans le fichier zip extrait.

Puis-je ajuster mes parameters pour empêcher la création de ce dossier ou dois-je acheter un outil de compression tiers?

MISE À JOUR : Je viens de trouver une application gratuite pour OSX qui résout mon problème: ” YemuZip ”

MISE À JOUR 2 : YemuZip n’est plus un logiciel gratuit

Lorsque j’ai eu ce problème, je l’ai fait en ligne de commande:

zip file.zip uncompressed

EDIT , après de nombreuses notes en bas de page: J’utilisais cette option depuis un certain temps et je ne sais pas où je l’ai appris, alors je ne peux pas vous donner une meilleure explication. La réponse de Chris Johnson est correcte, mais je ne supprimerai pas la mienne. Comme le dit un commentaire, il est plus précis de ce que demande OP, car il compresse sans ces fichiers, au lieu de les supprimer d’un fichier compressé. Je trouve cela aussi plus facile à retenir.

Peut être corrigé après le fait par zip -d filename.zip __MACOSX/\*

Ok après m’être attardé sur moi-même, j’ai trouvé cette solution, depuis le terminal:

 zip -r -X Archive.zip * 

Où -X signifie: Exclure les fichiers de ressources Mac invisibles tels que “_MACOSX” ou “._Filename” et les fichiers de stockage .ds

la source

Cette commande l’a fait pour moi:

 zip -r Target.zip Source -x "*.DS_Store" 

Target.zip est le fichier zip à créer. Source est le fichier / dossier source à compresser. Et le paramètre _x spécifie le fichier / dossier à ne pas inclure. Si ce qui précède ne fonctionne pas pour une raison quelconque, essayez plutôt ceci:

 zip -r Target.zip Source -x "*.DS_Store" -x "__MACOSX" 

J’utilise ce script Shell Automator pour résoudre le problème. Il apparaît en tant qu’élément de menu contextuel (clic droit sur n’importe quel fichier apparaissant dans le Finder).

 while read -rp; do zip -d "$p" __MACOSX/\* || true zip -d "$p" \*/.DS_Store || true done 
  1. Créer un nouveau service avec Automator
  2. Sélectionnez “Fichiers et dossiers” dans “Finder”
  3. Ajouter une “action de script shell”

script shell automator

élément de menu contextuel dans le Finder

Les dossiers indésirables peuvent également être supprimés de la manière suivante:

 zip -d filename.zip "__MACOSX*" 

Fonctionne mieux pour moi

L’utilitaire de ligne de commande zip ne crée jamais de répertoire __MACOSX , vous pouvez donc exécuter une commande comme celle-ci:

 zip directory.zip -x \*.DS_Store -r directory 

Dans la sortie ci-dessous, a.zip que j’ai créé avec l’utilitaire de ligne de commande zip ne contient pas de répertoire __MACOSX , mais a 2.zip que j’ai créé à partir du 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 -la\ 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 n’exclut pas les fichiers .DS_Store dans les répertoires, sauf -x \*.DS_Store .

Le fichier de niveau supérieur d’une archive zip contenant plusieurs fichiers doit généralement être un répertoire unique, car si ce n’est pas le cas, certains utilitaires de désarchivage (comme Unzip et 7z , mais pas Archive Utility, Unarchiver, unar ou dtrx ) ne créent pas contenant le répertoire des fichiers lorsque l’archive est extraite, ce qui rend souvent les fichiers difficiles à trouver, et si plusieurs archives comme celles-là sont extraites en même temps, il peut être difficile de savoir quels fichiers appartiennent à quelle archive.

L’utilitaire d’archivage crée uniquement un répertoire __MACOSX lorsque vous créez une archive où au moins un fichier contient des métadonnées telles que des atsortingbuts étendus, des indicateurs de fichier ou une fourchette de ressources. Le répertoire __MACOSX contient des fichiers AppleDouble dont le nom de fichier commence par ._ et permet de stocker des métadonnées spécifiques à OS X. L’utilitaire de ligne de commande zip supprime les métadonnées telles que les atsortingbuts étendus, les indicateurs de fichier et les fourches de ressources, ce qui signifie également que les métadonnées telles que les balises sont perdues et que les alias cessent de fonctionner.

Normalement, vous pouvez simplement ignorer les métadonnées spécifiques à OS X, mais pour voir ce que contiennent les fichiers de métadonnées, vous pouvez utiliser xattr -l . xattr inclut également des xattr ressources et de fichiers, car même s’ils ne sont pas réellement stockés en tant qu’atsortingbuts étendus, ils sont accessibles via l’interface des atsortingbuts étendus. L’utilitaire d’archivage et l’utilitaire de ligne de commande zip suppriment les listes de contrôle d’access.

ne compressez aucun fichier caché:

 zip newzipname filename.any -x "\.*" 

avec cette question, il devrait être comme:

 zip newzipname filename.any -x "\__MACOSX" 

Il faut dire cependant que la commande zip s’exécute dans le terminal en compressant simplement le fichier, elle ne compresse pas les autres. Donc, le résultat est le même:

 zip newzipname filename.any 

Voulez-vous dire l’outil de ligne de commande zip ou la commande de compression du Finder?

Pour zip , vous pouvez essayer l’option --data-fork . Si cela ne le fait pas, vous pouvez essayer --no-extra , bien que cela semble ignorer les autres métadonnées de fichier qui pourraient être utiles, comme uid / gid et les fichiers.

Pour la commande Compress du Finder, je ne pense pas qu’il existe des options pour contrôler son comportement. C’est pour le cas simple.

L’autre outil, et peut-être celui que le Finder utilise réellement sous le capot, est ditto . Avec les options -c -k , il crée des archives zip. Avec cet outil, vous pouvez expérimenter avec --norsrc , --noextattr , --noqtn , --noacl et / ou simplement laisser l’option --sequesterRsrc (qui, selon la page de manuel, peut être responsable du sous-répertoire __MACOSX ). Bien que l’absence de --sequesterRsrc signifie peut-être simplement utiliser le format AppleDouble, qui créerait des fichiers ._ partout au lieu d’un répertoire __MACOSX .

Vous ne pouvez pas

Mais ce que vous pouvez faire est de supprimer ces dossiers indésirables après la compression. La ligne de commande zip prend différents arguments où un, le -d , sert à supprimer le contenu basé sur une expression régulière. Vous pouvez donc l’utiliser comme ceci:

 zip -d filename.zip __MACOSX/\* 

J’ai une meilleure solution après avoir lu toutes les réponses existantes. Tout pourrait être fait par un workflow en un seul clic droit. Pas de logiciel supplémentaire, pas de trucs en ligne de commande compliqués et pas de trucs de shell.

Le workflow de l’automate:

  • Entrée: fichiers ou dossiers de n’importe quelle application.
  • Étape 1: Créer une archive, le système intégré avec les parameters par défaut.
  • Étape 2: Exécuter la commande Shell, avec une entrée en tant que parameters. Copier la commande ci-dessous.

    zip -d "$@" "__MACOSX/*" || true

    zip -d "$@" "*/.DS_Store" || true

Sauvez-le et nous avons fini! Il suffit de cliquer avec le bouton droit de la souris sur un dossier ou sur un ensemble de fichiers et de choisir le stream de travail dans le menu Services. Les archives sans métadonnées seront créées à côté.

Échantillon

Voici comment j’évite le répertoire __MACOSX lors de la compression de fichiers avec la commande tar :

$ cd dir-you-want-to-archive $ find . | xargs xattr -l # <- list all files with special xattr attributes ... ./conf/clamav: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/global: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/web_server: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55

Supprimez d'abord l'atsortingbut:

find . | xargs xattr -d com.apple.quarantine

Exécuter la find . | xargs xattr -l find . | xargs xattr -l find . | xargs xattr -l encore une fois, assurez-vous qu'aucun fichier n'a l'atsortingbut xattr. alors vous êtes prêt à partir:

tar cjvf file.tar.bz2 dir

 zip -r "$destFileName.zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*" 
  • -x "*/\__MACOSX" : ignorez __MACOSX comme vous le mentionnez.
  • -x "*/\.*" : ignore tout fichier caché, tel que .DS_Store.
  • Citez la variable pour éviter le fichier s’il est nommé avec SPACE.

Vous pouvez également créer Automator Service pour faciliter son utilisation dans le Finder. Cliquez sur le lien ci-dessous pour voir les détails si vous en avez besoin.

Github