Comment extraire un seul dossier d'une grande archive tar.gz?

132

J'utilise cette commande sur une archive de 5 Go

tar -zxvf archive.tar.gz /folder/in/archive

est-ce la bonne façon de faire cela? Il semble prendre une éternité sans sortie en ligne de commande ...

Garrett Hall
la source
Avez-vous utilisé un chemin absolu ou relatif? Devrait être relatif, à part ça, ça a l'air bien. Combien de temps l'avez-vous laissé fonctionner et quelle est la qualité de votre système? Cela prendra au moins plusieurs minutes sur une machine rapide. Potentiellement une heure ou plus? Je fais un test maintenant.
Kevin
Oui, il s’est achevé après environ 1 heure, mais le chemin absolu était faux, vous aviez raison.
Garrett Hall
5
Sous Linux, vous pouvez regarder jusqu'à quel point dans l'archive tarest avec cat /proc/$(pidof tar)/fdinfo/0(adapter la commande si vous avez plus d'un tarprocessus en cours).
Gilles
La partie importante est également pas de barre oblique finale. L'utilisation folder/folder2/ne fonctionnera pas.
Marki555

Réponses:

145

tarstocke les chemins relatifs par défaut . GNU tar le dit même si vous essayez de stocker un chemin absolu:

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

Si vous avez besoin d'extraire un dossier particulier, regardez ce qu'il y a dans le fichier tar:

tar -tvf foo.tar

Et notez le nom de fichier exact. Dans le cas de mon foo.tardossier, je pourrais extraire /home/foo/baren disant:

tar -xvf foo.tar home/foo/bar # Note: no leading slash

Donc non, la façon dont vous avez posté n'est pas (nécessairement) la bonne façon de le faire. Vous devez laisser de côté la barre oblique. Si vous voulez simuler des chemins absolus, faites-le d' cd /abord et assurez-vous que vous êtes le superutilisateur. En outre, cela fait la même chose:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

Il existe de très bonnes raisons pour tarconvertir les chemins en chemins relatifs. L'une est la possibilité de restaurer une archive dans des endroits autres que sa source d'origine. L'autre est la sécurité. Vous pouvez extraire une archive, vous attendre à ce que ses fichiers apparaissent dans votre répertoire de travail actuel et remplacer à la place les fichiers système (ou votre propre travail) ailleurs par erreur.

Remarque: si vous utilisez l' -Poption tar sera d' archiver des chemins absolus. Il est donc toujours utile de vérifier le contenu des grandes archives avant de les extraire.

Alexios
la source
36
--strip-components=Npeut être utile à certains ici.
Acumenus
2
dans mon cas, il était nécessaire d'écrire à la ./foldername/place de foldername, je suppose que c'est parce que, lorsque j'ai créé le goudron, je l'ai créé tar -cvf santi.tar ./*et quand j'ai "répertorié" le goudron, c'est ce qu'il a ditdrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
santiago arizti
1
Et à propos .gz?
Peter Krauss
1
@PeterKrauss passe -xvfà -xzvf(en ajoutant l' -zoption) et évidemment foo.tarà foo.tar.gzou quel que soit le nom de votre archive. Il en va de même pour -j(bz2) et sur certaines versions récentes -J(xz). Sinon, un pipeline zcat foo.tar.gz | tar -xvf - …fonctionne également.
Alexios
Et rappelez-vous, si vous êtes fatigué de toutes les sorties verbeuses lors de l'extraction, sautez simplement le vdans tous les exemples. Par exemple, tar -tf foo.taret tar -xf foo.tar ....
Bo R