Warum kann tar keine .zip-Dateien extrahieren? [geschlossen]

28

Ich habe versucht , eine Mehrheit der Formate (gzip, etc.) mit einer Zip - Datei zu extrahieren tar, und wenn ich es frustriert genug , um Google wurde, fand ich keine Möglichkeit , eine Zip - Datei mit zu extrahieren tarund nur Empfehlungen zur Nutzung zipoder unzip. Tatsächlich hat mein Linux-System nicht einmal ein zipHilfsprogramm, sondern nur unzip(ich frage mich, warum dies die empfohlene Hauptoption ist). Natürlich hat es unzipfunktioniert und mein Problem gelöst, aber warum können tarZIP-Dateien nicht extrahiert werden? Vielleicht sollte ich stattdessen fragen, was der Unterschied zwischen zip und den von unterstützten Komprimierungsmethoden ist tar.

Pluto
quelle
1
Nur eine Notiz, bsdtarkann .zipArchive extrahieren : P
HalosGhost
12
Sie meinen wie in "Warum kann ich keinen Dosenöffner verwenden, um Karotten zu hacken?" Das Ding ist, dass tar ein eigenes Dateiformat hat und dieses dann mit der von Ihnen gewählten Methode komprimiert. zip ist ein ganz anderes Biest. So einfach ist das. Es ist "der Unix-Weg", ein kleines Werkzeug zu haben, das einen Job gut macht, anstatt eine eierlegende, wolltragende Milchsau zu haben, die all Ihren Bedürfnissen gerecht wird.
Tink
Ich habe meine Frage leicht überarbeitet, um dies zu verdeutlichen, aber ich denke, meine Frage impliziert eindeutig, dass zip ein Komprimierungsformat und kein Ersatzwerkzeug für tar + compression ist. Die von mir gewählte Antwort korrigierte meine Vermutung und zeigte, dass die Antwort nicht meinungsbasiert war.
Pluto
Sie haben nicht zipstandardmäßig , da seine Lizenz nicht kompatibel mit GPL
Venimus

Antworten:

29

Die UNIX-Philosophie ist, kleine Werkzeuge zu haben. Ein Tool macht genau eins, aber das ist besonders gut.

Das tarTool kombiniert nur mehrere Dateien zu einer einzigen Datei ohne Komprimierung.

Das gzipTool komprimiert nur eine einzelne Datei.

Wenn Sie beides haben möchten, kombinieren Sie einfach beide Werkzeuge, und Sie erhalten eine .tar.gzDatei.


Das zipTool ist eine ganz andere Sache. Es nimmt eine Reihe von Dateien und kombiniert sie zu einer einzigen komprimierten Datei. Mit völlig anderen Algorithmen.


Wenn Sie möchten, dass ein Tool sie alle regiert, verwenden Sie atool. Es wird eine ganze Reihe von verschiedenen Formaten unterstützen, indem es einfach das Format erkennt und das richtige Tool aufruft.

michas
quelle
Vielen Dank, dass Sie den Zweck von beidem erklärt haben, anstatt nur zu erklären, was tar tut. Ich fand die Antwort schnell heraus, nachdem ich mir einen Wikipedia-Artikel angesehen hatte , in dem die Formate für "Archivierung", "Komprimierung" und beide in drei verschiedenen Tabellen aufgelistet waren. Ich dachte, ich würde auf eine Antwort warten, die dies klar erklärte.
Pluto
Um ein bisschen wählerisch zu sein, ist der gzipKomprimierungsalgorithmus derselbe, der auch von verwendet wird zip. Der Unterschied besteht darin, dass gzipjeder Byte-Stream, einschließlich einer .tarDatei, komprimiert werden soll , während zip, abgeleitet und inspiriert von PKZIP, Komprimierung und Archivierung in einem Schritt (und in dieser Reihenfolge) erfolgen.
Joe Sewell
9

Lange Rede, kurzer Sinn: Das GNU-Tool tar leitet keine Pipe durch zip / unzip, da es niemanden interessiert.

Lange Geschichte, Originalgröße:

tarwar ursprünglich nicht zum Dekomprimieren und Komprimieren von Dateien gedacht, sondern zum Archivieren mehrerer Dateien in einer einzigen großen Datei. Da Benutzer ihre Dateien nicht nur archivieren, sondern auch komprimieren wollten, leiten sie die tarAusgabe einfach durch einen beliebigen Kompressor, der Datenstromeingaben akzeptiert, und legen die Ergebnisse in einer Datei ab. Profitieren!

Um eine solche Aufgabe so einfach wie möglich tarzu gestalten, haben wir beschlossen, die erzeugten Dateien intern an Komprimierungswerkzeuge wie gzip, lzma usw. weiterzuleiten, die bei der Ausführung durch spezielle Flags für jedes Format aktiviert wurden tar. Aus diesem Grund wird beim Versuch, eine beschädigte Datei zu extrahieren tar, der zugrunde liegende Tool-Fehler anstelle der folgenden angezeigt tar:

$ tar zxf damaged.tar.gz
gzip: damaged.tar.gz: unexpected end of file

Es ist also nicht so, dass tarZIP-Dateien nicht dekomprimiert werden, sondern dass es nicht möglich ist, tarsie durch das richtige Tool zu leiten, da sich niemand wirklich die Mühe gemacht hat, sie zu implementieren, und ZIP die Dateiarchivierungsfunktion der TAR-Datei bereits ausführt Format gibt es weniger Grund für tar, es zu unterstützen.

Jetzt gibt es All-in-One-Tools, die alles komprimieren / dekomprimieren, was Sie auf sie werfen. Auch hier benötigen Sie die richtigen Tools, um dies tatsächlich zu unterstützen. Wenn Sie sie nicht haben, schlägt das Tool fehl.

Braiam
quelle
1
Abgesehen davon, dass niemand das richtige Tool implementiert, um die Pipe durchzuarbeiten, gibt es auch keinen: tar-Dateien kombinieren nur mehrere Dateien zu einer. Die Komprimierung ist getrennt. Die Filter-TAR-Pipeline komprimiert / dekomprimiert also nur eine einzelne TAR-Datei. Zip funktioniert anders; Es verwendet ein integriertes Tool zum Komprimieren und Kombinieren (ein ähnliches Unix-Programm ist afio).
Derobert
Ich würde vorschlagen, einige der vorhandenen All-in-One-Komprimierungswerkzeuge zu erwähnen. ZB gibt es das GNOME file-roller...
Derobert
@derobert file-roller unterstützt zip nur, wenn Sie unzip / zip / p7zip installiert haben. Ansonsten ist es genauso nutzlos wie Teer.
Braiam
tar unterstützt die verschiedenen komprimierten Versionen nur, wenn Sie auch das entsprechende Tool installiert haben ... Die Archivmanager für mehrere Formate sind nützlich, da sie Ihnen eine einheitliche Oberfläche für die Verarbeitung verschiedener Archivformate bieten.
Derobert
@derobert genau.
Braiam
3

Eine tarDatei ist ein Dateiformat für sich, das für Bandarchive entwickelt wurde. Dieses Format kann dann unter Verwendung von (beispielsweise) gzipoder bzip2Komprimierungsformaten komprimiert werden. Wenn Sie eine komprimierte TAR-Datei extrahieren, dekomprimieren Sie sie effektiv und extrahieren dann die Originaldateien aus der nicht komprimierten tarDatei.

Wenn Sie eine zipDatei extrahieren, enthält diese keine tarDatei, sondern nur alle Ihre Originaldateien. Daher gibt es keinen Grund tar, überhaupt in den Prozess involviert zu sein.

Sie können Dateien auch mit gzipoder bzip2allein komprimieren , genauso wie Sie zipDateien erstellen können (ohne dass dies tarbeteiligt ist). Wenn Sie diese Dateien dekomprimieren, verwenden Sie gunzipoder bunzip2und nicht tar.

garethTheRed
quelle
1

Da die Antwort "Manche Dinge sind einfach und wir sollten sie akzeptieren" auch nicht gut zu mir passt, habe ich nur ein bisschen gegraben (immer gut, um etwas Neues zu lernen, oder?).

Anscheinend geht es darum, wohin die Tools gingen und was ihr Ziel war.

Anstatt das, was ich gefunden habe, zu paraphrasieren und das Wasser unnötig trüb zu machen (die Verschleierung macht mich wütend), werfen Sie einen Blick auf diesen Artikel: http://www.differencebetween.net/technology/difference-between-zip-and-gzip/

Ich nehme an, dass tar Zip-Unterstützung eingebaut haben könnte, aber die Methoden sind offensichtlich grundlegend anders. Oder vielleicht dachten sie, warum jemand dieses Archivierungswerkzeug verwenden würde, um Dateien von einem anderen Archivierungs- und Komprimierungswerkzeug aus zu verwalten (oder vielleicht gab es einen Streit zwischen den beiden ursprünglichen Programmierern und es wurde eine einstweilige Verfügung erlassen, die es den Reißverschlüssen untersagte, die Anwendungsgrenze zu überschreiten). ja ich mache Witze).

Yuppers
quelle