Wie extrahiert man einen einzelnen Ordner aus einem großen tar.gz-Archiv?

Ich verwende diesen Befehl für 5 GB Archiv

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

Ist dies der richtige Weg, dies zu tun? Es scheint ewig zu dauern, ohne Befehlszeilenausgabe …

Kommentare

  • Haben Sie einen absoluten oder relativen Pfad verwendet? Sollte relativ sein, ansonsten sieht es richtig aus. Wie lange haben Sie es laufen lassen und wie gut ist Ihr System? Auf einer schnellen Maschine dauert es mindestens einige Minuten. Möglicherweise eine Stunde oder länger? Ich ' führe jetzt einen Test durch.
  • Ja, er wurde nach ~ 1 Stunde abgeschlossen, aber der absolute Pfad war falsch, Sie hatten Recht.
  • Unter Linux können Sie mit cat /proc/$(pidof tar)/fdinfo/0 beobachten, wie weit tar im Archiv ist (passen Sie den Befehl an, wenn Sie mehr als einen tar Prozess läuft).
  • Der wichtige Teil ist auch kein abschließender Schrägstrich. Die Verwendung von folder/folder2/ funktioniert nicht '.

Antwort

tar speichert 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 an, was darin enthalten ist die TAR-Datei:

tar -tvf foo.tar 

Und notieren Sie den genauen Dateinamen. Im Fall meiner foo.tar -Datei könnte ich Extrahieren Sie /home/foo/bar, indem Sie sagen:

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

Also nein, die Art und Weise, wie Sie gepostet haben, ist nicht (unbedingt) korrekt Weg, es zu tun. Sie müssen den führenden Schrägstrich weglassen. Wenn Sie absolute Pfade simulieren möchten, führen Sie zuerst cd / aus und stellen Sie sicher, dass Sie der Superuser sind. Dies funktioniert auch wie folgt:

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

Es gibt sehr offensichtliche, gute Gründe, warum tar Pfade in relative konvertiert. Eine davon ist die Möglichkeit, ein Archiv an anderen Orten als seiner ursprünglichen Quelle wiederherzustellen Das andere ist die Sicherheit. Sie können ein Archiv extrahieren, erwarten, dass seine Dateien in Ihrem aktuellen Arbeitsverzeichnis angezeigt werden, und stattdessen versehentlich Systemdateien (oder Ihre eigene Arbeit) an anderer Stelle überschreiben.

Hinweis: Wenn Sie das -P Option, tar wird Absolute Pfade archivieren. Es lohnt sich also immer, den Inhalt großer Archive vor dem Extrahieren zu überprüfen.

Kommentare

  • --strip-components=N kann für einige hier nützlich sein.
  • In meinem Fall musste ./foldername/ anstelle von , ich denke, das lag daran, dass ich den Teer beim Erstellen mit tar -cvf santi.tar ./* und beim " erstellt habe aufgelistet " der Teer dies ist, was es sagte drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
  • Und über .gz?
  • @PeterKrauss ändere -xvf in -xzvf (füge die -z Option) und natürlich foo.tar bis foo.tar.gz oder wie auch immer Ihr Archiv heißt. Gleiches gilt für -j (bz2) und in einigen neueren Versionen -J (xz). Andernfalls funktioniert auch eine Pipeline wie zcat foo.tar.gz | tar -xvf - ….
  • Und denken Sie daran, wenn Sie die ausführliche Ausgabe während der Extraktion satt haben, überspringen Sie einfach die v in allen Beispielen. Zum Beispiel tar -tf foo.tar und tar -xf foo.tar ....

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.