web-dev-qa-db-fra.com

Puis-je extraire un dossier spécifique à l'aide de goudron vers un autre dossier?

Je suis nouveau dans le monde de Linux et je semble avoir rencontré une trottoir. Je sais que je peux extraire une archive spécifique à l'aide de la commande tar xvfz archivename.tar.gz sampledir/ Cependant, comment puis-je extraire sampledir/ à testdir/ plutôt que le chemin que l'archive est par ex. L'archive est dans le chemin /tmp/archivename.tar.gz et je voudrais extraire sampledir à testdir qui est dans le chemin /tmp/testdir.

14
PeanutsMonkey

Ce que vous cherchez est le -C Option:

$ man tar
<snip>

-C, --directory DIR
       change to directory DIR

Utilisation, par votre exemple:

$ tar xvzf archivename.tar.gz -C /tmp/testdir/ sampledir/

En outre, vous voudrez peut-être savoir que les versions modernes de tar ne nécessitent pas le drapeau z pour décompresser des fichiers gzippés; Ils remarqueront que c'est un .gz et faire la bonne chose automatiquement.

19
Handyman5

Vous n'avez pas besoin de jouer à des jeux fous avec tout endommage. TAR prend pleinement en charge l'extraction d'un sous-ensemble des fichiers dans une archive, comme indiqué dans l'exemple suivant (trivial):

/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 pathSpec doit correspondre exactement au contenu du tarfil. Alors quand tu fais un tar tf, si le chemin commence par ./, vous devez mettre cela dans, et si cela ne l'a pas, vous devez le laisser sortir. De plus, si vous souhaitez extraire un sous-sous-sous-sous-sous-sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Sous-Path.

3
womble