Welchen Befehl benötige ich, um eine .tar.gz-Datei zu entpacken / extrahieren?

830

Ich habe eine riesige .tar.gz-Datei von einem Client erhalten, der ungefähr 800 MB an Bilddateien enthält (wenn nicht komprimiert). Das FTP unseres Hosting-Unternehmens ist sehr langsam, daher ist es nicht praktisch, alle Dateien lokal zu extrahieren und über FTP zu versenden. Ich konnte die .tar.gz-Datei auf unsere Hosting-Site übertragen, aber wenn ich in mein Verzeichnis ssh und versuche, sie zu entpacken, erhalte ich folgenden Fehler:

[esthers@clients locations]$ unzip community_images.tar.gz
Archive:  community_images.tar.gz
  End-of-central-directory signature not found.  Either this file is not a zipfile, or it constitutes one disk of a multi-part archive.  In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive.
note:  community_images.tar.gz may be a plain executable, not an archive
unzip:  cannot find zipfile directory in one of community_images.tar.gz or community_images.tar.gz.zip, and cannot find community_images.tar.gz.ZIP, period.

Welchen Befehl muss ich verwenden, um alle Dateien in einer .tar.gz-Datei zu extrahieren?

EmmyS
quelle

Antworten:

1390

Geben Sie man tarfür weitere Informationen, aber dieser Befehl sollte es tun:

tar -xvzf community_images.tar.gz

Zur weiteren Erläuterung hat tar alle Dateien in einem Paket zusammengefasst community_images.tar. Das gzip-Programm hat die Komprimierung angewendet, daher die gz-Erweiterung. Der Befehl macht also ein paar Dinge:

  • f: Dies ist die letzte Flagge des Befehls sein muss, und der Teer f ile muss unmittelbar nach sein. Es teilt tar den Namen und den Pfad der komprimierten Datei mit.
  • z: weist tar an, das Archiv mit g z ip zu dekomprimieren
  • x: Tar können Dateien oder e sammeln x ihnen Darm - Trakt. xtut das letztere.
  • v: lässt Teer viel reden. V erbose-Ausgabe zeigt Ihnen alle Dateien, die extrahiert werden.
djeikyb
quelle
5
@Shiki Ich habe deine vorgeschlagene Bearbeitung gesehen. Ich denke nicht, dass dies eine angemessene Änderung ist. Ich bevorzuge die Art und Weise, wie ich dieses Tool erklärt habe. Ich kann denken , dass Ihr tar -xfVorschlag , eine große zusätzliche Antwort machen würde.
DJEIKYB
3
Dies ist eine der besseren Erklärungen aus den Millionen ähnlich formulierter Fragen
JohnMerlino
1
@KasunSiyambalapitiya Wird standardmäßig im aktuellen Ordner abgelegt. Siehe auch man tar; suche nach der -COption. Oder sehen Sie sich die andere Antwort an 😉
djeikyb
6
Erinnert mich an xckds Artikel über Teer. Ich muss jedes Mal zurückkommen.
mgarey
19
Meine mnemonic hierfür ist: x - Darm - Trakt z e v *** ing f iles.
Agargara
172

Wenn Sie möchten, dass die Dateien an ein bestimmtes Ziel extrahiert werden, können Sie Folgendes hinzufügen: Stellen Sie sicher, dass Sie zuerst das Verzeichnis erstellen , in diesem Fall: ~ / Pictures / Community-C /destination/path/

Beispiel:

mkdir ~/Pictures/Community
tar xf community_images.tar.gz -C /home/emmys/Pictures/Community/

Sie können es leicht merken , wenn man bedenkt , sagen tar e X - Darm - Trakt ein F ile

gif des am terminal durchgeführten prozesses

Hinweis: Denken Sie daran , Sie in Manpages mit suchen ?+ Begriff zu suchen, und dann nund Nzur nächsten oder vorherige Instanz des Begriffs , den Sie suchen zu gehen.

JorgeArtware
quelle
5
Vergessen Sie nicht C für " c hange directory"! Außerdem ist es meiner Meinung nach besser, keine Optionen für Bindestriche und Nicht-Bindestriche zu mischen (besonders verwirrend bei der Verwendung ps).
Dienstag,
2
Warum ist es nicht wie jedes andere Kommando?
Jan M.
6
Ich liebe deinen Hinweis 'tar to e X tract a File'
Nam G VU
2
1+ für das animierte GIF
Nick Steele
Man kann auch verwenden --directory="/home/emmys/Pictures/Community/"(was meiner Meinung nach leichter zu merken ist als -C).
Patrick Dark
107

Irgendwann tarwurde ein Upgrade auf automatische Dekomprimierung durchgeführt. Alles was Sie jetzt brauchen ist:

tar xf community_images.tar.gz

Die gleiche Erklärung gilt:

  • f: Dies ist die letzte Flagge des Befehls sein muss, und der Teer f ile muss unmittelbar nach sein. Es teilt tar den Namen und den Pfad der komprimierten Datei mit.
  • x: e x Traktiere die Dateien.

Beachten Sie den fehlenden Bindestrich für die Befehlsflags. Dies liegt daran, dass die meisten Versionen von tar sowohl die Optionen gnu als auch bsd zulassen (vereinfacht gesagt, benötigt gnu einen Bindestrich, bsd nicht).

djeikyb
quelle
1
Gibt es dazu Unterlagen? Ich habe überall nach einem Verweis darauf gesucht, ich benutze nie das -z-Flag und alles wird komprimiert, also habe ich mir Sorgen gemacht, wenn ich meine Tarballs überhaupt nicht komprimiert habe, haha. Vielen Dank.
Neurosnap
2
@neurosnap finden Sie im Gnu-Handbuch und im BSD-Handbuch
djeikyb
3
Wahrscheinlich wäre es besser gewesen, Ihre ursprüngliche Antwort zu bearbeiten.
Seth
3
@Seth es fühlt sich deutlich genug an, um eine separate Antwort zu sein, insbesondere im Zusammenhang mit der destruktiven Bearbeitung, die es provoziert hat. Ich werde es nach der Arbeit überdenken, vielleicht ist es eine einfachere Möglichkeit, es zusammenzuführen, als ich ursprünglich gedacht hatte.
Djeikyb
2
@EnricoMariaDeAngelis bsd tar seit mindestens 2004 und gnu tar seit mindestens 2010 unterstützen die automatische Auswahl eines Dekomprimierers. Es ist möglich, dass keine "neue" (dieses Jahrhundert? Neunzigerjahre +?) Version von Teer die manuelle Auswahl eines Dekomprimierers erfordert.
djeikyb
11

Sich an alle Flags für tarzu erinnern, kann mühsam sein. Obligatorische XKCD:

Bildbeschreibung hier eingeben

Deshalb habe ich mein eigenes kleines Skript in Python erstellt, um das zu tun. Schnell, dreckig, cpwie im Gebrauch:

#!/usr/bin/env python3
import tarfile,sys,os
tf = tarfile.open(name=sys.argv[1],mode='r:gz')
where = '.'
if len(sys.argv) == 3:
    where = sys.argv[2]
tf.extractall(path=where)
tf.close()

Verwenden Sie es wie folgt:

myuntar.py archive.tar

Siehe auch ähnliches Skript zum Entpacken von Zip-Archiven .

Sergiy Kolodyazhnyy
quelle
2
:) Nur zwei Teer-Flags, die man sich merken muss, -cafum sie anhand des Dateinamens zu erstellen und -xfzu extrahieren (AFAIK funktioniert bei jedem Teertyp).
Videonauth
@Videonauth Ich weiß, es ist nicht so komplex, aber aus irgendeinem Grund erinnere ich mich nie an diese Optionen. Vielleicht, weil ich mich nicht oft genug mit Archiven befasse.
Sergiy Kolodyazhnyy
Gilt das nur für gezippte TAR-Dateien? API-Dokumente erwähnen einen Modus zum Lesen mit transparenter Komprimierung; würde sich das eher so verhalten tar xf <file>?
Djeikyb
7

Schnelle Antwort:

tar -xvf  <.tar file> or <.tar.xz file>
tar -xzvf <.tar.gz file>
tar -xjvf <.tar.bz2 file>

[ HINWEIS ]:

  • -v Ausführliche Liste der verarbeiteten Dateien.
  • -z Filtern Sie das Archiv durch gzip.
  • -f Verwenden Sie die Archivdatei oder das Gerät ARCHIVE.
  • -x Dateien aus einem Archiv extrahieren.
  • -j bzip2.
  • tar -xfarchive.tar # Extrahiert alle Dateien von archive.tar.
Benyamin Jafari
quelle
4

Falls Sie die .tar.gzDatei nicht mit extrahieren können

tar -xvzf fileName.tar.gz

Versuchen Sie es mit

tar xf fileName.tar.gz
Shravan40
quelle
4
Wenn es sich um eine gezippte TAR-Datei handelt, funktioniert der erste Befehl immer. Wenn es nicht funktioniert, haben Sie keine gzippte tar-Datei. Der letztere Befehl ist eine großartige Empfehlung für Leute, denen es egal ist, welcher Komprimierungsalgorithmus für ihre TAR-Datei verwendet wurde.
DJEIKYB
0

Sie können dies auch im ersten Schritt tun:

gunzip community_images.tar.gz

Dann haben Sie die Datei: community_images.tar

Der zweite Schritt wäre:

tar -xvf community_images.tar

Und die * .tar-Datei würde extrahiert.

dschinn1001
quelle
0

tar xvf file.tar.gz

  • x für den Auszug
  • v für ausführlich (Dateien auflisten)
  • f für Dateiname ist der nächste

Jede remote moderne Version von tar sollte automatisch erkennen, dass das Archiv gzippt ist, und "z" für Sie hinzufügen.

geschlafen
quelle