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

70

Lorsque je cible certains fichiers sous OS X:

tar cvf foo.tar foo

Il produit un fichier supplémentaire ._foodans l'archive:

./._foo
foo

qui ne s'affiche que si je l'extrais sur un système d'exploitation autre que Mac. Mais ._foon'existe pas sur mon système de fichiers! Que se passe-t-il? Comment puis-je m'en débarrasser?

Jesse Beder
la source
Déteste ça. C'est moche quand je navigue dans les archives avec 7-Zip.
Nathaniel

Réponses:

79

Le fichier tar d'OS X utilise le format AppleDouble pour stocker les attributs étendus et les ACL.

$ touch file1 file2 file3
$ xattr -w key value file1
$ chmod +a 'admin allow delete' file2
$ ls -le@ *
-rw-r--r--@ 1 lauri  staff  0 May 25 07:09 file1
    key 5
-rw-r--r--+ 1 lauri  staff  0 May 25 07:09 file2
 0: group:admin allow delete
-rw-r--r--  1 lauri  staff  0 May 25 07:09 file3
$ tar -cf 1.tar *
$ tar -tf 1.tar
./._file1
file1
./._file2
file2
file3

Le fichier tar d'OS X sait également comment reconvertir les membres ._ en formats natifs, mais les fichiers ._ sont généralement conservés lors de l'extraction des archives sur d'autres plateformes. Vous pouvez indiquer à tar de ne pas inclure les métadonnées en définissant COPYFILE_DISABLE sur une valeur:

$ COPYFILE_DISABLE=1 tar -cf 2.tar file*    
$ tar -tf 2.tar
file1
file2
file3
  • Les fonctions de copyfile sont décrites dans man copyfile
  • ls -l@affiche les clés et les tailles des attributs étendus, ls -leimprime les ACL
  • xattr -l liste les clés et les valeurs des attributs étendus
  • xattr -c efface tous les attributs étendus (-d ne peut pas être utilisé seul)
  • chmod -N supprime les ACL
  • Les fichiers Zip créés sous OS X utilisent un dossier __MACOSX pour stocker des métadonnées similaires.

Informations stockées sous forme d'attributs étendus:

  • Fourches de ressources (les fourches de ressources sont des attributs étendus depuis 10.4)
    • Icônes personnalisées définies dans le Finder et images des fichiers Icon \ r
    • Métadonnées dans les fichiers PSD
    • Objets stockés dans des fichiers scpt, état de la fenêtre de l'éditeur AppleScript, descriptions de scripts
  • Informations sur les alias (les alias cessent de fonctionner si les attributs étendus sont supprimés)
  • État de la quarantaine ou URL sources des fichiers téléchargés sur Internet
  • Commentaires Spotlight
  • Encodage des fichiers enregistrés avec TextEdit
  • Position du curseur dans les fichiers ouverts avec TextMate
  • Notes écrémées
Jesse Beder
la source
J'ai la tar 1.15.1 de GNU par défaut sur MacOS X 10.5.8 (Leopard). La dernière version de GNU est la 1.22 (mars 2009). Téléchargé et construit: il ne semble pas avoir '--no-xattrs' lorsqu'il est construit sur MacOS X.
Jonathan Leffler
1
Au lieu d'exporter cette variable dans tout le système, vous pouvez également utiliser env COPYFILE_DISABLE tar -cf archive.tar my_folder/.
Georg Schölly
1
@Cawas, le problème était qu'ils étaient apparus dans l'archive, que je distribuais ensuite sur plusieurs plates-formes, et qu'ils n'avaient aucune signification sur un système d'exploitation autre qu'Apple.
Jesse Beder le
1
C'est vrai Jesse, ils n'ont en effet aucune signification pour les autres systèmes d'exploitation / systèmes de fichiers . Mais l' info est là et nous pouvons catou typepour le moins voir ce qu'il y a à l'intérieur. Et c'est généralement quelque chose de simple qui a été saisi manuellement. Je ne le jetterais pas pour la sauvegarde, mais cela peut être une corbeille si vous voulez distribuer quelque chose sur plusieurs plates-formes et spécialement si c'est là par erreur. Il suffit de dire que l’option de les laisser est assez valable.
cregox
1
Pour votre information, la ligne d'exportation de Leopard fonctionne également pour Lion.
jeudi
12

Depuis bsdtar 3.0.3 - libarchive 3.0.3(et peut-être plus tôt) il y a une nouvelle option à la bsdtarcommande appelée --disable-copyfilepour supprimer la création de ._fichiers.

# on Mac OS X
# /usr/bin/tar -> bsdtar
ls -l /usr/bin/tar    

# from man bsdtar
--disable-copyfile
        Mac OS X specific.  Disable the use of copyfile(3).
mdm
la source
3
Avec bsdtar 2.8.3 - libarchive 2.8.3de 10.7.5l' --disable-copyfileest , mais pas documentée disponible tout de même.
Stefan Schmidt
github.com/libarchive/libarchive/commit/… et forums.macrumors.com/showthread.php?p=20684196#post20684196 attirer l'attention sur la documentation obsolète d'Apple.
Graham Perrin
1

Les ._fichiers sont des ressources, comme mentionné dans d'autres réponses. Cependant, il existe un meilleur moyen de s'en débarrasser en utilisant tar:

export COPYFILE_DISABLE=true
tar cvf foo.tar foo

Il existe également un dot_cleanutilitaire pour nettoyer ces fichiers (je pense qu'il est généralement utilisé pour le stockage externe).

jtbandes
la source
Merci! Voir la fin de ma réponse ci-dessus pour cette solution.
Jesse Beder
dot_clean ne fonctionne pas pour cela puisque tar crée les fichiers
joedevon
0

Voici un script python pour supprimer ces fichiers. Devrait fonctionner dans n'importe quel OS populaire.

Pas complètement testé, utilisez-le à vos risques et périls!

import os
import os.path

def dot_clean(folder):
    files = os.listdir(folder)
    for file in files:
        full_name = folder + "/" + file
        if os.path.isdir(full_name):
            dot_clean(full_name)
        elif file.startswith("._"):
            os.remove(full_name)

dot_clean('.')            
Aivar
la source
1
Eh bien, sauf pour OS X avec HFS + ...
Daniel Beck
Pourquoi pas? Pouvez-vous suggérer comment résoudre ce problème?
Aivar
1
Ces fichiers n'existent pas sur HFS +, car le système de fichiers peut stocker les métadonnées en interne. Ces fichiers constituent une solution de contournement pour les systèmes de fichiers qui ne le prennent pas en charge. Par exemple, lorsque vous transférez des fichiers de HFS + vers une clé USB FAT USB, ils apparaissent et, lorsque vous les transférez, ils disparaissent.
Daniel Beck
-3

Le caractère point, ".", Est utilisé sur la plate-forme Mac en tant qu'indicateur de fichier caché. Sous Windows, c'est le caractère "$". Quoi qu'il en soit, le fichier ._foo contient probablement des informations spécifiques à OS X et je vous recommande de ne pas les supprimer. Sur d'autres systèmes, vous devrez l'ignorer, ou quelqu'un ici pourra peut-être vous fournir un script masquant les fichiers et les dossiers commençant par un ".".

dbmikus
la source
Ce sont toutes des métadonnées, principalement des icônes telles que des icônes personnalisées, l'application qui a créé le fichier, etc. La suppression est sûre.
Dreamlax
Néanmoins, si vous utilisez principalement Mac, je vous recommande de le garder. Si vous utilisez Windows plus que OS X, allez-y, tuez-le.
dbmikus
(@dreamlax) Il est vrai qu'une grande partie des données stockées dans les attributs étendus sont des métadonnées qu'il est possible de supprimer sans danger, mais ce n'est pas toujours le cas. En particulier, lorsque des fichiers avec des «ressources forks» sont stockés sur quelque chose qui n’est pas dérivé de HFS (FAT, UFS, tar, etc.), ces fichiers «._ *» sont utilisés pour conserver les données (entre autres attributs étendus) du fichier. fourchettes de ressources. Alors que de nombreux formats de fichiers délaissent l’utilisation des fourchettes de ressources (au profit des ensembles), il existe des fichiers dans lesquels des données critiques sont stockées dans la fourchette de ressources (parfois, les données de ressources sont les seules données).
Chris Johnsen