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 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?
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 freeware
__MACOSX
,.DS_Store
,._fileName
, et tous les autres Mac OS étrons assortis gouttes dans ses archives. Le `tar 'd'OSX le fait également - au mépris flagrant du principe du moindre étonnement .Réponses:
Quand j'ai eu ce problème, je l'ai fait à partir de 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 appris, donc 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 à ce que demande OP, car il se compresse sans ces fichiers, au lieu de les supprimer d'un fichier compressé. Je trouve aussi plus facile de me souvenir.
la source
zip
, qui est une application tierce, le répertoire __MACOSX / n'est jamais créé en premier lieu.zip -rX file.zip uncompressed_directory
Peut être réparé après coup par
zip -d filename.zip __MACOSX/\*
la source
zip -d filename.zip \*/.DS_Store
find ~ -type f -name '*.zip' -exec zip -d '{}' __MACOSX/\* \;
. Remplacez votre point de départ par~
.cleanzip(){ zip -d $1 $2 __MACOSX/\* \*/.DS_Store; }
. Utilisation:cleanzip file.zip
oucleanzip file.zip MORE_JUNK_FILES
(le deuxième paramètre est facultatif)Dans le dossier que vous souhaitez compresser, dans le terminal:
Où -X signifie: exclut les fichiers de ressources Mac invisibles tels que «_MACOSX» ou «._Filename» et les fichiers de stockage .ds
la source
Remarque: ne fonctionnera que pour le dossier et l'arborescence de dossiers suivante dans laquelle vous vous trouvez et doit avoir le
*
caractère générique.la source
-X
n'exclut pas les fichiers .DS_Store. La raison pour laquelle cela peut fonctionner pour votre application est que vous ne faites que compresser*
, ce qui correspond à des fichiers génériques qui ne commencent pas par ".". Essayez-le sur un répertoire contenant un fichier point, et vous verrez qu'il est inclus.zip -r -X Archive.zip myfolder
sur un dossier aboutit toujours à un fichier zip contenant le fichier .DS_Store.Cette commande l'a fait pour moi:
Target.zip
est le fichier zip à créer.Source
est le fichier / dossier source à compresser. Et le_x
paramètre 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:la source
zip
utilitaire de ligne de commande ne crée jamais de__MACOSX
répertoire, donc le premier extrait de code fonctionne et la-x "__MACOSX"
partie n'est pas nécessaire.J'utilise ce script Automator Shell pour le réparer après. Il apparaît comme élément de menu contextuel (clic droit sur n'importe quel fichier affiché dans le Finder).
la source
zip -d "$p" __MACOSX/\* || true
dans votre réponse.Les dossiers indésirables peuvent également être supprimés de la manière suivante:
Fonctionne mieux pour moi
la source
-x "*/\__MACOSX"
: ignorez __MACOSX comme vous le mentionnez.-x "*/\.*"
: ignorez tout fichier caché, tel que .DS_Store.En outre, vous pouvez créer le service Automator pour le rendre facilement utilisable dans Finder. Vérifiez le lien ci-dessous pour voir les détails si vous avez besoin.
Github
la source
L'
zip
utilitaire de ligne de commande ne crée jamais de__MACOSX
répertoire, vous pouvez donc simplement exécuter une commande comme celle-ci:Dans la sortie ci-dessous,
a.zip
que j'ai créée avec l'zip
utilitaire de ligne de commande ne contient pas de__MACOSX
répertoire, maisa 2.zip
que j'ai créé à partir du Finder.-x .DS_Store
n'exclut pas les.DS_Store
fichiers à l'intérieur des répertoires mais le-x \*.DS_Store
fait.Le fichier de niveau supérieur d'une archive zip avec 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
et7z
, mais pas Archive Utility, The Unarchiverunar
, oudtrx
) ne créent pas de répertoire contenant pour le fichiers lorsque l'archive est extraite, ce qui rend souvent les fichiers difficiles à trouver, et si plusieurs archives comme celle-ci sont extraites en même temps, il peut être difficile de dire quels fichiers appartiennent à quelle archive.L'utilitaire d'archivage crée uniquement un
__MACOSX
répertoire lorsque vous créez une archive dans laquelle au moins un fichier contient des métadonnées telles que des attributs étendus, des indicateurs de fichier ou une fourchette de ressources. Le__MACOSX
répertoire contient des fichiers AppleDouble dont le nom de fichier commence par._
qui sont utilisés pour stocker les métadonnées spécifiques à OS X. L'zip
utilitaire de ligne de commande rejette les métadonnées telles que les attributs étendus, les indicateurs de fichier et les fourchettes 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 d'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 les fichiers de métadonnées contiennent, vous pouvez utiliser
xattr -l
.xattr
inclut également les fourchettes de ressources et les indicateurs de fichier, car même s'ils ne sont pas réellement stockés en tant qu'attributs étendus, ils sont accessibles via l'interface d'attributs étendus. L'utilitaire d'archivage et l'zip
utilitaire de ligne de commande suppriment les ACL.la source
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 dont l'un, le-d
, sert à supprimer le contenu basé sur une expression régulière. Vous pouvez donc l'utiliser comme ceci:la source
ne compresser aucun fichier caché:
avec cette question, ça devrait être comme:
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. Alors faites ceci, le résultat est le même:
la source
__MACOSX
ne commence pas par.
Voulez-vous dire l'
zip
outil de ligne de commande ou la commande de compression du Finder?Pour
zip
, vous pouvez essayer l'--data-fork
option. Si cela ne le fait pas, vous pouvez essayer--no-extra
, bien que cela semble ignorer d'autres métadonnées de fichier qui pourraient être utiles, comme uid / gid et file times.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-c -k
options, il crée des archives zip. Avec cet outil, vous pouvez expérimenter avec--norsrc
,--noextattr
,--noqtn
,--noacl
et / ou laisser simplement la--sequesterRsrc
possibilité (qui, selon la page de manuel, peut être responsable du__MACOSX
sous - répertoire). Bien que, peut-être l'absence de--sequesterRsrc
moyen simplement d'utiliser le format AppleDouble, qui créerait des fichiers ._ partout au lieu d'un__MACOSX
répertoire.la source
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 seul clic droit. AUCUN logiciel supplémentaire, AUCUN truc compliqué de ligne de commande et AUCUN truc de shell.
Le flux de travail de l'automate:
Étape 2: Exécutez la commande Shell, avec l'entrée comme paramètres. Copiez la commande ci-dessous.
zip -d "$@" "__MACOSX/*" || true
zip -d "$@" "*/.DS_Store" || true
Enregistrez-le et nous avons terminé! Faites un clic droit sur le dossier ou la masse de fichiers et choisissez le flux de travail dans le menu des services. Une archive sans métadonnées sera créée à côté.
la source
Voici comment j'évite le
__MACOSX
répertoire lors de la compression de fichiers avec latar
commande:$ 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 à
find . | xargs xattr -l
nouveau, assurez-vous qu'aucun fichier ne possède l'attribut xattr. alors vous êtes prêt à partir:tar cjvf file.tar.bz2 dir
la source