4 votes

Comment utiliser tar -C sur Snow Leopard lors de la création d'une archive ?

La page de l'homme indique

-C répertoire
      En mode c et r, cela change le répertoire avant d'ajouter les fichiers suivants.

Cependant, tar ne change pas vers le répertoire que je spécifie, mais signale plutôt

tar: : Impossible d'effectuer stat: Aucun fichier ou dossier de ce type

pour chaque dossier dans le répertoire où j'exécute la commande tar.

Dois-je vraiment faire quelque chose comme

cd  && tar ... && cd -

ou y a-t-il un moyen de faire fonctionner cela ?

2voto

Mark Points 251

Je pense que vous ne pouvez pas utiliser l'option -C comme vous le supposez dans cette question.

La section 6.10.1 Changer de répertoire de travail dans le manuel GNU pour tar décrit l'option -C comme suit,

Pour changer de répertoire de travail au milieu d'une liste de noms de fichiers, que ce soit en ligne de commande ou dans un fichier spécifié en utilisant '--files-from' ('-T'), utilisez '--directory' ('-C'). Cela changera le répertoire de travail vers le répertoire spécifié après ce point dans la liste.

'--directory=répertoire'
'-C répertoire'

Change le répertoire de travail au milieu d'une ligne de commande.

Par exemple,

$ tar -c -f jams.tar grape prune -C food cherry

mettra les fichiers 'grape' et 'prune' du répertoire actuel dans l'archive 'jams.tar', suivi du fichier 'cherry' du répertoire 'food'. Cette option est particulièrement utile lorsque vous avez plusieurs fichiers largement séparés que vous voulez stocker dans la même archive.

Notez que le fichier 'cherry' est enregistré dans l'archive sous le nom précis 'cherry', et non pas 'food/cherry'. Ainsi, l'archive contiendra trois fichiers qui semblent tous provenir du même répertoire; si l'archive est extraite avec simplement 'tar --extract', les trois fichiers seront écrits dans le répertoire actuel.

Il y a quelques exemples supplémentaires sur la page du manuel...


Mise à jour :
Je n'ai généralement pas l'habitude de mélanger des fichiers de différents chemins dans un seul tar-ball.
Cependant, si c'est ce que vous désirez, deux choses peuvent être faites,

  1. Utilisez l'option -T avec une liste de répertoires/fichiers que vous voulez regrouper ensemble.
    Cela collectera tout avec des préfixes de chemin supplémentaires.
  2. Utilisez l'option -h sur un répertoire 'image de lien'
    (vous pouvez en créer un avec un script pour créer des liens vers des fichiers et des répertoires d'intérêt sous un nouveau répertoire vide)
    L'option -h utilisée sur un tel répertoire créera un seul tar-ball qui représente la disposition des fichiers sous ce répertoire.

1voto

user12786 Points 454

Personnellement, je préfère utiliser les sous-shell pour mettre tar en "position". Je n'ai jamais appris l'option -C, donc je ne suis pas sûr de son fonctionnement.

Supposons que mon répertoire de travail actuel soit /chemin/a, et que je veuille créer une archive tar de /chemin/b/foo sans le chemin /chemin/b :

utilisateur@hôte:/chemin/a$ ( cd /chemin/b && tar czf ~/tarball.tgz foo )
utilisateur@hôte:/chemin/a$

L'archive tar résultante contient le répertoire foo/ et tous ses contenus, mais pas le chemin /chemin/b. Le sous-shell exécute le cd, puis le tar si le cd réussit, puis revient à mon shell d'origine dans le même répertoire de travail.

1voto

Drake Points 3517

Tar -C ne fonctionne pas avec des jokers car comme l'a indiqué Henno dans l'un des commentaires :

* sera étendu par le shell en fonction de votre répertoire actuel, avant d'être transmis à tar

Donc si vous essayez de faire quelque chose comme :

tar -cvzf myfile.tgz -C somepath *

Ça ne marchera pas. Autant que je sache, vous devrez d'abord changer de répertoire comme quack quixote le suggère.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X