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

14

Je suis nouveau dans le monde de Linux et semble avoir rencontré une pierre d'achoppement. Je sais que je peux extraire une archive specifc en utilisant la commande tar xvfz archivename.tar.gz sampledir/mais comment puis - je extraire sampledir/à testdir/plutôt que le chemin que l'archive est en egcurrently l'archive est dans le chemin /tmp/archivename.tar.gzet je voudrais extraire sampledirde ce testdirqui est dans le chemin /tmp/testdir.

PeanutsMonkey
la source

Réponses:

19

Ce que vous cherchez, c'est l' -Coption:

$ man tar
<snip>

-C, --directory DIR
       change to directory DIR

Utilisation, selon votre exemple:

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

En outre, vous pourriez être intéressé de savoir que les versions modernes de tarne nécessitent pas l' zindicateur pour décompresser les fichiers compressés; ils remarqueront que c'est un .gzet faites la bonne chose automatiquement.

Homme à tout faire5
la source
Merci. Curieusement, j'ai essayé avant de poster la question et cela a échoué. Peut-être que j'ai manqué une option. Je vais réessayer.
PeanutsMonkey
Éclat. J'oublie toujours cela pour les grandes archives.
zmonteca
3

Vous n'avez pas besoin de jouer à des jeux fous avec tout décompacté. Tar prend entièrement en charge l'extraction d'un sous-ensemble de fichiers dans 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 pathspec doit correspondre exactement au contenu du fichier tar. Donc, quand vous faites un tar tf, si le chemin commence par ./, vous devez le mettre dedans, et s'il ne l'a pas, vous devez le laisser de côté. De plus, si vous souhaitez extraire un sous-sous-sous-sous-sous-sous-sous-sous-sous-chemin, cela finira par N niveaux profondément dans le système de fichiers lorsque vous aurez terminé.

womble
la source
Merci womble. Peut-être que ce n'est pas le bon exemple à utiliser, mais je compare tar à Winzip, WinRAR, etc. appliquer un processus similaire, par exemple sélectionner le fichier que vous souhaitez désarchiver (tar le fait) et sélectionner le chemin vers lequel vous souhaitez extraire (tar ne le fait que si je suis dans le répertoire spécifique).
PeanutsMonkey
Vous voulez alors l' -Coption de tarer.
womble