Wie extrahieren Sie einen einzelnen Ordner aus einem großen tar.gz-Archiv?

132

Ich verwende diesen Befehl für ein 5-GB- Archiv

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

Ist dies der richtige Weg, um dies zu tun? Es scheint ewig ohne Kommandozeilenausgabe zu dauern ...

Garrett Hall
quelle
Haben Sie einen absoluten oder relativen Pfad verwendet? Sollte relativ sein, ansonsten sieht es richtig aus. Wie lange hast du es laufen lassen und wie gut ist dein System? Es dauert mindestens einige Minuten auf einer schnellen Maschine. Möglicherweise eine Stunde oder länger? Ich führe gerade einen Test durch.
Kevin
Ja, es war nach ~ 1 Stunde beendet, aber der absolute Pfad war falsch, Sie hatten Recht.
Garrett Hall
5
Unter Linux können Sie beobachten, wie weit das Archiv tarmit ist cat /proc/$(pidof tar)/fdinfo/0(passen Sie den Befehl an, wenn mehr als ein tarProzess ausgeführt wird).
Gilles
Der wichtige Teil ist auch kein abschließender Schrägstrich. Verwenden folder/folder2/wird nicht funktionieren.
Marki555

Antworten:

145

tarspeichert standardmäßig relative Pfade . GNU tar sagt dies sogar, wenn Sie versuchen, einen absoluten Pfad zu speichern:

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

Wenn Sie einen bestimmten Ordner extrahieren müssen, schauen Sie sich die Tar-Datei an:

tar -tvf foo.tar

Und notiere dir den genauen Dateinamen. Im Falle meiner foo.tarAkte könnte ich extrahieren, /home/foo/barindem ich sage:

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

Nein, die Art und Weise, wie Sie gepostet haben, ist (notwendigerweise) nicht die richtige. Sie müssen den führenden Schrägstrich weglassen. Wenn Sie absolute Pfade simulieren möchten, müssen Sie cd /zunächst sicherstellen, dass Sie der Superuser sind. Dies macht auch das Gleiche:

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

Es gibt sehr offensichtliche gute Gründe, warum tarPfade in relative konvertiert werden. Eine Möglichkeit besteht darin, ein Archiv an einem anderen Ort als der ursprünglichen Quelle wiederherzustellen. Das andere ist Sicherheit. Sie könnten ein Archiv extrahieren, erwarten, dass seine Dateien in Ihrem aktuellen Arbeitsverzeichnis erscheinen, und stattdessen versehentlich Systemdateien (oder Ihre eigene Arbeit) an einer anderen Stelle überschreiben.

Hinweis: Wenn Sie diese -POption verwenden, tar werden absolute Pfade archiviert. Es lohnt sich also immer, den Inhalt großer Archive vor dem Extrahieren zu überprüfen.

Alexios
quelle
36
--strip-components=Nkann hier für einige nützlich sein.
Acumenus
2
In meinem Fall war es notwendig zu schreiben, ./foldername/anstatt foldername, ich vermute, dass es war, weil, als ich den Teer erstellte, mit dem ich ihn erstellte, tar -cvf santi.tar ./*und als ich den Teer "auflistete", das ist, was es sagtedrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
Santiago arizti
1
Und ungefähr .gz?
Peter Krauss
1
@PeterKrauss wechseln -xvfzu -xzvf( -zOption hinzufügen ) und natürlich foo.tarzu foo.tar.gzoder wie auch immer Ihr Archiv heißt. Dasselbe gilt für -j(bz2) und für einige neuere Versionen -J(xz). Ansonsten zcat foo.tar.gz | tar -xvf - …funktioniert eine Pipeline wie auch.
Alexios
Und denken Sie daran, wenn Sie die ausführliche Ausgabe beim Extrahieren satt haben, überspringen Sie das vin allen Beispielen. ZB tar -tf foo.tarund tar -xf foo.tar ....
Bo R