Obtenez mac tar pour arrêter de mettre ._ * noms de fichiers dans des archives tar

Duplication possible:
Pourquoi puis-je avoir des fichiers comme ._foo dans mon tarball sur OS X?

Je crée des scripts autoconf sur un Mac. Lorsque tar fonctionne, il met tous ces ._ noms 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 ._ foobar afin qu'ils puissent être restaurés sur un autre système Mac. Mais je ne les veux pas, ils ne sont que de l'ordinaire. Y a-t-il un moyen de les supprimer?

Par une réponse à une autre question , vous pouvez définir la variable d'environnement non autorisée (?) COPYFILE_DISABLE pour éviter que plusieurs des programmes fournis par le système (y compris tar ) aient un sens spécial pour les membres d'archive ._* . En particulier, cela les empêchera de:

  • Stocker des données d'attribut étendues (y compris les fourchettes de ressources) dans les membres de l'archive ._*
    (C.-à-d. 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 provenant de membres d'archives nommés comme ._*
    (C.-à-d. Ne pas mal interpréter ._* archiver les membres dans les archives d'autres systèmes).

La valeur que vous utilisez pour la variable d'environnement n'est pas importante (elle peut même être la chaîne vide). Les valeurs comme 0 , et false ne rétablissent pas la fonctionnalité. La seule chose qui compte, c'est de savoir si la variable est définie (vous devez la "désactiver" pour rétablir la fonctionnalité).

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

 COPYFILE_DISABLE=1 tar cf new.tar … 

Si vous rencontrez le problème le plus souvent, vous voudrez peut-être 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 le souhaitez, vous pouvez alors désactiver la variable pour les commandes individuelles.

 (unset COPYFILE_DISABLE; tar cf somefile.tar …) 

Sur ce système Mac OS X 10.6, les commandes suivantes semblent connaître 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 10.4, COPY_EXTENDED_ATTRIBUTES_DISABLE fonctionne de la même manière.

Pas un expert, mais un petit googling l'a trouvé: 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 dans un script … il est possible que vous ne puissiez pas empêcher la création de fichiers de fork de ressources, mais vous pouvez les supprimer automatiquement par la suite.

Modifier: J'aurais dû mentionner que cela pourrait avoir de mauvais résultats, à vos risques et périls.

Vous pouvez essayer de compiler votre propre tar ou l'installer à partir de Macports ou Fink si disponible (Homebrew ne l'a pas). Avec une certaine "chance", il devrait être ignorant des métadonnées OS X et sauter la création de ces fichiers.