Die Teerextraktion wird auch automatisch dekomprimiert

7

Wenn ich renne

tar -cvzf archive.tgz file1 file2 ; rm file1 file2

Normalerweise wird ein komprimierter Tarball erstellt, aber wie ist das möglich?

tar -xvf archive.tgz

gibt mir die unkomprimierten Dateien zurück? Ich habe immer gedacht, dass das Flag -z erforderlich sein würde.

Brikowski
quelle
Anscheinend denken die Entwickler von UNIX auch, dass sich das so tarverhalten sollte: 9p.io/wiki/plan9/UNIX_to_Plan_9_command_translation/index.html
PSkocik
1
@PSkocik Sicher, es bricht die Unix-Philosophie: Schreiben Sie Programme, die eines tun und es gut machen. Schreiben Sie Programme, um zusammenzuarbeiten.
Jlliagre
@jlliagre Ich glaube nicht. In der Lage zu sein, zu schließen, dass Sie beim Zippen der Datei Gunzip benötigen, bedeutet nicht, dass Ihr Programm monolithisch sein muss.
PSkocik
@PSkocik Du hast recht. Zumindest GNU-, Solaris- und Busybox-Tar-Implementierungen verwenden alle das externe Dienstprogramm gzip, sodass kein Code dupliziert wird.
Jlliagre

Antworten:

17

Ihre tarImplementierung, wahrscheinlich GNUdiejenige, erkennt die übergebene Datei, wenn ein Parameter komprimiert wird.

Die tarheutzutage GNU tarund am busyboxhäufigsten verwendeten Implementierungen suchen nach den ersten Bytes der Datei, auch bekannt als magische Zahl, um herauszufinden, ob sie komprimiert ist und welcher Komprimierungsalgorithmus verwendet werden soll.

Die tarauf kommerziellen Unixen gefundenen Implementierungen, die auf dem ursprünglichen AT & T-Code basieren, unterstützen das -zFlag überhaupt nicht . Eine bemerkenswerte Ausnahme ist Solaris 11, tarwo diese Erweiterung hinzugefügt wurde, einschließlich der Möglichkeit, das Dateiformat zu erkennen.

jlliagre
quelle
Ich dachte, es sieht nach dem Suffix aus. Es muss auch wissen, welche Komprimierungsmethode zum Inkomprimieren verwendet wurde. Würde es das richtig machen, wenn die TAR-Datei falsch angehängt würde?
Faheem Mitha
1
@FaheemMitha, keine Raketenwissenschaft, suchen Sie einfach nach Datei (1).
vonbrand
Tatsächlich erkennen mehrere Tar-Implementierungen automatisch, ob der Inhalt komprimiert ist. Eine gute Antwort würde darauf hinweisen und wie es gemacht wird.
Thomas Dickey
@ ThomasDickey machen Sie es.
Faheem Mitha
@ThomasDickey Ich habe nicht geschrieben, dass andere Teer-Implementierungen niemals funktionieren, nur dass GNU-Teer heutzutage bei weitem der am häufigsten verwendete ist, wahrscheinlich der vom OP verwendete. Beachten Sie auch, dass der ursprüngliche tarBefehl (AT & T) überhaupt nicht unterstützt -zwurde.
Jlliagre
1

Die -zOption ist in zwei bekannten Implementierungen von tar nicht erforderlich: GNU tar und BSD tar (auch bekannt als libarchive ). Das Erkennen des erforderlichen Komprimierungsalgorithmus ist trivial, indem die ersten Bytes der Eingabedatei überprüft werden.

Ob Sie zufällig die eine oder die andere dieser Implementierungen verwenden, hängt weitgehend davon ab, welches Betriebssystem Sie verwenden: Linux-basierte Systeme oder BSD-Systeme (einschließlich OSX).

Ich habe auf meiner Seite Details zur Einführung dieser Funktionen in Bezug auf Teer und Portabilität zusammengefasst .

Thomas Dickey
quelle
0

Star führte eine automatische Komprimierungserkennung und eine automatische Dekomprimierung ein. vor 20 Jahren.

In diesen Tagen haben einige andere Teerimplementierungen wie gtar die Idee kopiert.

Übrigens: star versteht die magischen Zahlen im komprimierten Stream, um die richtige Dekomprimierungsmethode zu ermitteln. Beachten Sie auch, dass gtar als fehlgeschlagen gemeldet wurde, wenn ein komprimiertes Archiv stdinaus einer benannten Datei gelesen wird .

schily
quelle