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
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.
Peut être corrigé après coup par Zip -d filename.Zip __MACOSX/\*
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
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 *
.
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"
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
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 -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.
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
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
.
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.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.
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
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:
É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é.