web-dev-qa-db-fra.com

Compresse Zip Mac sans dossier __MACOSX?

Lorsque je compresse des fichiers avec le compresseur Zip intégré dans Mac OSX, un dossier supplémentaire intitulé "__MACOSX" est créé dans le fichier Zip extrait.

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

UPDATE: Je viens de trouver une application gratuite pour OSX qui résout mon problème: " YemuZip "

UPDATE 2: YemuZip n'est plus un logiciel gratuit 

136
Scott B

Quand j'ai eu ce problème je l'ai fait depuis la ligne de commande:

Zip file.Zip uncompressed

EDIT, après de nombreux votes négatifs: j'utilisais cette option il y a quelque temps et je ne sais pas où je l'ai apprise, je ne peux donc pas vous donner une meilleure explication. Le réponse de Chris Johnson est correct, mais je ne supprimerai pas le mien. Comme le dit un commentaire, il est plus précis de répondre à la question posée par OP, car il compresse sans ces fichiers au lieu de les supprimer d'un fichier compressé. Je trouve aussi plus facile de me souvenir.

64
sinuhepop

Peut être corrigé après coup par Zip -d filename.Zip __MACOSX/\*

286
Chris Johnson

Dans le dossier que vous voulez compresser, dans le terminal:

Zip -r -X Archive.Zip *

Où -X signifie: exclut les fichiers de ressources Mac invisibles tels que «_MACOSX» ou «._Filename» et les fichiers .ds store

la source

Remarque: Ne fonctionnera que pour le dossier et l'arborescence de dossiers suivante dans laquelle vous vous trouvez et doit comporter le caractère générique *.

45
pompalini

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 cela ne fonctionne pas pour une raison quelconque, essayez plutôt ceci:

Zip -r Target.Zip Source -x "*.DS_Store" -x "__MACOSX"
23
Adil Hussain

J'utilise ce script de shell Automator pour résoudre ce problème après le ... .. Il apparaît en tant qu'élément de menu contextuel (clic droit sur un fichier quelconque dans le Finder).

while read -r p; 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"

 automator Shell script

 contextual menu item in Finder

14
benedikt

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

Zip -d filename.Zip "__MACOSX*"

Fonctionne mieux pour moi

7
SabU

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 -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 n'exclut pas .DS_Store dans les répertoires mais -x \*.DS_Store le fait.

Le fichier de niveau supérieur d’une archive Zip contenant plusieurs fichiers doit généralement être un répertoire unique. Dans le cas contraire, certains utilitaires désarchivants (tels que unzip et 7z, mais pas l’utilitaire d’archivage, The Unarchiver, unar ou dtrx) ne créent pas contenant le répertoire des fichiers lors de l'extraction de l'archive, ce qui rend souvent les fichiers difficiles à trouver. Si plusieurs archives de ce type sont extraites simultanément, il peut être difficile de déterminer 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 attributs étendus, des indicateurs de fichier ou un fork de ressources. Le répertoire __MACOSX contient les fichiers AppleDouble dont le nom de fichier commence par ._ et sont utilisés pour stocker les métadonnées spécifiques à OS X. L'utilitaire de ligne de commande Zip ignore les métadonnées telles que les attributs é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 car les informations contenues dans un fichier d'alias sont stockées dans une fourchette de ressources.

Normalement, vous pouvez simplement supprimer 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 forks de ressources et des indicateurs de fichier, car même s'ils ne sont pas stockés en tant qu'attributs étendus, vous pouvez y accéder via l'interface des attributs étendus. Les utilitaires d'archivage et l'utilitaire de ligne de commande Zip ignorent les ACL.

3
nisetama

ne Zip aucun fichier caché:

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

avec cette question, cela 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
2
Xian Shu

Voulez-vous dire l'outil de ligne de commande Zip ou la commande Compresser 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 temps de fichier.

Pour la commande Compresser du Finder, je ne pense pas qu'il existe aucune option 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, ce qui créerait des fichiers ._ partout au lieu d'un répertoire __MACOSX.

1
Ken Thomases
Zip -r "$destFileName.Zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
  • -x "*/\__MACOSX": ignore __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.

En outre, vous pouvez créer le service Automator pour le rendre facilement utilisable dans le Finder . Consultez le lien ci-dessous pour obtenir des détails si vous en avez besoin.

Github

1
Jian Jason

Tu ne peux pas. 

Mais ce que vous pouvez faire est de supprimer ces dossiers indésirables après la compression. La ligne de commande Zip accepte différents arguments, l'un d'entre eux, le -d, permettant de supprimer le contenu basé sur une expression régulière. Donc, vous pouvez l'utiliser comme ceci:

Zip -d filename.Zip __MACOSX/\*

Voici comment éviter 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'attribut:

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

Exécutez à nouveau find . | xargs xattr -l et assurez-vous qu'aucun fichier ne possède l'attribut xattr. alors vous êtes prêt à partir:

tar cjvf file.tar.bz2 dir

0
Zhang Huangbin

J'ai une meilleure solution après avoir lu toutes les réponses existantes. Tout pourrait être fait par un flux de travail en un simple clic droit. NO logiciel supplémentaire, NO commandes complexes en ligne de commande et NO Shell.

Le flux de travail 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 paramètres par défaut.
  • Étape 2: Exécuter la commande Shell, avec une entrée en tant que paramètre. Copier la commande ci-dessous.

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

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

Enregistrez-le et nous avons terminé! Il suffit de cliquer avec le bouton droit de la souris sur le dossier ou sur le volume de fichiers et de choisir le flux de travail dans le menu Services. Des archives sans métadonnées seront créées à côté.

 Sample

0
ttimasdf