GNU/Linux >> Tutoriels Linux >  >> Linux

Créer une archive Tar d'un répertoire, à l'exception des fichiers cachés ?

Je souhaite créer une archive tar d'un répertoire spécifique (avec ses sous-répertoires bien sûr). Mais quand je le fais, en utilisant la commande tar, j'obtiens une liste des fichiers inclus, par exemple :

un calendrier_final/._style.css

un calendrier_final/style.css

Comme vous pouvez le voir, il existe deux versions du même fichier. Cela vaut pour tous les fichiers, et il y en a beaucoup. Comment puis-je exclure les fichiers temporaires, avec le préfixe ._, de l'archive tar ?

Réponse acceptée :

Vous avez posté dans un commentaire que vous travaillez sur un système Mac OS X. C'est un indice important sur le but de ces ._* fichiers.

Ces ._* les entrées d'archive sont des morceaux de données AppleDouble qui contiennent les informations supplémentaires associées au fichier correspondant (celui sans le ._ préfixe). Ils sont générés par le copyfile(3) spécifique à Mac OS X famille de fonctions. Les blobs AppleDouble stockent les données de contrôle d'accès (ACL) et les attributs étendus (généralement, Finder flags et "resource forks", mais xattrs peut être utilisé pour stocker n'importe quel type de données).

Les outils d'archivage Mac OS X fournis par le système (bsdtar (également lié symboliquement en tant que tar ), gnutar , et pax ) générera un ._* membre d'archive pour tout fichier auquel sont associées des informations étendues ; en mode "désarchiver", ils décoderont également ces membres de l'archive et appliqueront les informations étendues résultantes au fichier associé. Cela crée une archive "pleine fidélité" à utiliser sur les systèmes Mac OS X en préservant et en extrayant ultérieurement toutes les informations que le système de fichiers HFS+ peut stocker.

Les outils d'archivage correspondants sur d'autres systèmes ne savent pas donner un traitement spécial à ces ._* fichiers, ils sont donc décompressés comme des fichiers normaux. Étant donné que ces fichiers sont assez inutiles sur d'autres systèmes, ils sont souvent considérés comme des "fichiers indésirables". De même, si un système autre que Mac OS X génère une archive contenant des fichiers normaux commençant par ._ , les outils de désarchivage de Mac OS X essaieront de décoder ces fichiers en tant qu'informations étendues.

Il existe cependant un moyen non documenté (?) de faire en sorte que les archiveurs Mac OS X fournis par le système se comportent comme ils le font sur d'autres systèmes Unixy :la variable d'environnement COPYFILE_DISABLE. La définition de cette variable (à n'importe quelle valeur, même la chaîne vide), empêchera les archiveurs de générer ._* membres d'archive pour représenter toute information étendue associée aux fichiers archivés. Sa présence empêchera également les archiveurs d'essayer d'interpréter ces membres d'archives comme des informations étendues.

COPYFILE_DISABLE=1 tar czf new.tar.gz …
COPYFILE_DISABLE=1 tar xzf unixy.tar.gz …

Vous pouvez définir cette variable dans le fichier d'initialisation de votre shell si vous souhaitez travailler de cette façon plus souvent qu'autrement.

# disable special creation/extraction of ._* files by tar, etc. on Mac OS X
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

Ensuite, lorsque vous devez réactiver la fonctionnalité (pour conserver/restaurer les informations étendues), vous pouvez "désactiver" la variable pour des commandes individuelles :

(unset COPYFILE_DISABLE; tar czf new-osx.tar.gz …)

Les archiveurs sur Mac OS X 10.4 font également quelque chose de similaire, bien qu'ils utilisent une variable d'environnement différente :COPY_EXTENDED_ATTRIBUTES_DISABLE

En relation :Rediriger STDERR et STDOUT vers différentes variables sans fichiers temporaires ?
Linux
  1. Créer un répertoire cible lors de l'extraction de Tarball ?

  2. Créez un dossier dédié pour chaque fichier zip dans un répertoire et extrayez les fichiers zip

  3. Comment créer une archive tar divisée en plusieurs fichiers ou s'étendant sur plusieurs fichiers ?

  4. Extraire des fichiers spécifiques dans une archive tar à l'aide d'un caractère générique

  5. Comment tarer les fichiers avec un ordre trié ?

Commande Tar sous Linux (créer et extraire des archives)

Créer un répertoire personnel pour un utilisateur existant sous Linux

Commande tar Linux - Comment compresser des fichiers sous Linux

Comment tarer des types de fichiers spécifiques (extensions) dans un répertoire

Comment créer une archive zip compatible Linux d'un répertoire sur un Mac

Concaténer plusieurs fichiers tar en une seule commande