Je suis nouveau dans le monde de Linux et il semble que je me sois heurté à une pierre d'achoppement. Je sais que je peux extraire une archive spécifique en utilisant la commande tar xvfz archivename.tar.gz sampledir/
Cependant, comment puis-je extraire sampledir/
a testdir/
plutôt que le chemin dans lequel se trouve l'archive, par exemple, l'archive se trouve actuellement dans le chemin /tmp/archivename.tar.gz
et je voudrais extraire sampledir
a testdir
qui se trouve sur le chemin /tmp/testdir
.
Réponses
Trop de publicités?Ce que vous recherchez, c'est le -C
option :
$ man tar
<snip>
-C, --directory DIR
change to directory DIR
Utilisation, selon votre exemple :
$ tar xvzf archivename.tar.gz -C /tmp/testdir/ sampledir/
Par ailleurs, vous serez peut-être intéressé de savoir que les versions modernes de tar
n'ont pas besoin de la z
pour décompresser les fichiers gzippés ; ils remarqueront qu'il s'agit d'un indicateur .gz
et Do The Right Thing automatiquement.
Vous n'avez pas besoin de jouer à des jeux insensés pour tout désarticuler. Tar permet d'extraire uniquement un sous-ensemble des fichiers d'une archive, comme le montre l'exemple (trivial) suivant :
/tmp $ mkdir tarsrc
/tmp $ cd tarsrc
/tmp/tarsrc $ mkdir a b
/tmp/tarsrc $ touch a/aaa b/bbb
/tmp/tarsrc $ tar cf ../tartest.tar .
/tmp/tarsrc $ cd ..
/tmp $ mkdir tardest
/tmp $ cd tardest
/tmp/tardest $ tar xf ../tartest.tar ./a
/tmp/tardest $ ls -R
.:
a/
./a:
aaa
L'astuce est que le chemin d'accès doit correspondre exactement au contenu du fichier tar. Ainsi, lorsque vous faites un tar tf
si le chemin commence par ./
il faut l'insérer, et s'il ne l'a pas, il faut le laisser de côté. De plus, si vous voulez extraire un sous-sous-sous-sous-sous-sous-sous-chemin, il se retrouvera à N niveaux de profondeur dans le système de fichiers lorsque vous aurez terminé.