Obtenir que mac tar cesse de mettre les noms de fichiers ._ * dans les archives tar [dupliquer]


46

Dupliquer possible:
Pourquoi ai-je des fichiers tels que ._foo dans mon archive tar OS X?

Je crée des scripts autoconf sur un Mac. Quand tar est lancé, il place tous ces noms de. Foobar dans l’archive:

libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpr
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpr

Maintenant, ce qui se passe, c'est que le système de fichiers HFS d'Apple met les propriétés du fichier dans les noms ._fobar afin qu'elles puissent être restaurées sur un autre système Mac. Mais je ne les veux pas - ils ne sont que des cochonneries pour moi. Y a-t-il un moyen de les supprimer?



2
@geekosaur L'utilisateur sous unix.SE a abandonné et accepté une mauvaise réponse.
Daniel Beck

Il existe également une question connexe relative à l' extraction correcte de ._*fichiers à partir d'archives (par exemple .__init__.py) utilisant la même solution.
Chris Johnsen

Réponses:


69

Pour répondre à une autre question , vous pouvez définir la variable d'environnement non documentée (?) COPYFILE_DISABLE afin d'empêcher plusieurs programmes fournis par le système (y compris tar ) de donner une signification spéciale aux ._*membres de l'archive. En particulier, cela les empêchera de:

  • stocker des données d'attributs étendus (y compris des ressources), dans ._*des membres d'archives
    (c'est-à-dire ne pas «polluer» les archives créées sur Mac OS X mais destinées à être utilisées sur d'autres systèmes), et

  • tenter d'extraire des attributs étendus ou des ressources à partir de membres d'archive nommés comme ._*
    (c.-à-d. ne pas mal interpréter ._*les membres d'archive dans des archives provenant d'autres systèmes).

La valeur que vous utilisez pour la variable d'environnement n'est pas importante (il peut même s'agir d'une chaîne vide). Les valeurs telles que 0, et falsene réactiveront pas la fonctionnalité. La seule chose qui compte est de savoir si la variable est définie (vous devez la «désélectionner» pour réactiver la fonctionnalité).

Vous pouvez utiliser cette variable sur des commandes individuelles en tirant parti de la capacité des shells de type Bourne ( sh , ksh , bash , zsh , etc.) de préfixer des commandes avec des variables d'environnement supplémentaires.

COPYFILE_DISABLE=1 tar cf new.tar …

Si vous rencontrez le problème plus souvent qu'autrement, vous pouvez définir et exporter cette variable dans l'un des fichiers d'initialisation de votre shell.

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

Lorsque vous en avez besoin, vous pouvez alors désélectionner la variable pour des commandes individuelles.

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

Sur ce système Mac OS X 10.6, les commandes suivantes semblent toutes connaître l'existence de COPYFILE_DISABLE:

  • /usr/bin/tar(un lien symbolique vers bsdtar)
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLE est originaire de Mac OS X 10.5. Si vous devez prendre en charge la version 10.4, COPY_EXTENDED_ATTRIBUTES_DISABLE fonctionne de la même manière.


SENSATIONNEL. Exactement ce que je cherchais. Merci. Mes fichiers autoconf seront beaucoup, beaucoup plus propres.
vy32

0

Pas un expert, mais un peu de google trouvé ceci: http://www.ofzenandcomputing.com/zanswers/3422

et ceci: http://hintsforums.macworld.com/archive/index.php/t-28703.html

La deuxième commande semble pouvoir être incorporée à un script ... vous ne pourrez peut-être pas empêcher la création de fichiers de ressources, mais vous pourrez les supprimer automatiquement par la suite.

edit: J'aurais dû mentionner que cela peut avoir de mauvais résultats, utilisez-le à vos risques et périls.


1
Le script supprime les ressources des fichiers des fichiers du disque local. Ils servent généralement à quelque chose (comme changer l'application associée à un certain fichier), donc cela devrait venir avec un gros avertissement.
Daniel Beck

Le script ne m'aide pas. Il supprime les fichiers du disque, pas de l'archive tar. Il s'avère que je n'ai pas les fichiers de ressources sur mon disque. Mais ils sont mis dans les archives. Et contrairement aux fichiers zip, vous ne pouvez pas simplement supprimer des fichiers d’une archive tar.
vy32

(bah, délais d'attente) En fait, vous pouvez en utiliser à peu près n'importe lequel, à tarl' libarchiveexception de celui basé sur BSD (cela inclut Mac OS X), mais il est possible que ce ne soit pas fiable; L’installation de GNU tar est souvent une bonne idée. (C'est cependant douloureux. Je pense qu'il est nécessaire de les répertorier tous, puis de transmettre ces noms sur la ligne de commande.) De plus, techniquement, les ressources sont sur disque, mais sur HFS +, elles sont stockées dans des attributs étendus; Les ._fichiers sont un moyen utilisé par OS X pour stocker les fourchettes de ressources dans des emplacements qui ne prennent pas en charge les attributs étendus.
geekosaur

0

Vous pouvez essayer de vous compiler vous-même tarou de l’installer à partir de Macports ou de Fink, le cas échéant (ce n’est pas le cas de Homebrew). Avec un peu de «chance», il devrait ignorer les métadonnées OS X et ignorer la création de ces fichiers.


J'apprécierais une explication pour le vote négatif. Merci.
Daniel Beck
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.