Antworten:
tar
nur macht eine einzelne Datei aus mehreren Dateien, spielt es keine Kompression tun , wenn ein Kompressionsprogramm kombiniert wie gzip
oder bzip2
(was Sie aus anrufen können tar
durch die Verwendung -z
oder -j
Optionen, respectively). zip
kombiniert sowohl die Archivierung als auch die Komprimierung in einem Programm.
Teer
Postleitzahl
Die Tatsache, dass zip die Dateien separat komprimiert, wirkt sich auf die Komprimierungsraten aus, insbesondere bei vielen kleinen ähnlichen Dateien.
(Zumindest war das vor einem Jahrzehnt genau richtig.)
Tar speichert viel mehr Metadaten als Zip, siehe meinen Vergleich (es ist etwas veraltet):
(Klicken zum Vergrößern)
Tar besteht 65% der Tests, Zip nur 17%. Ich habe die Testsuite unter BSD-Lizenz auf github verfügbar gemacht, damit Sie es selbst ausprobieren können, wenn Sie einen Mac haben. Unter Linux bin ich mir nicht sicher, ob Metadaten vorhanden sind. Daher sind diese Tests möglicherweise nicht relevant.
Die Effizienz kann auf verschiedene Arten gemessen werden:
Es gibt auch andere Fragen, wie "Wie häufig sind die Tools zum Bearbeiten der resultierenden Archive?"
So entstehen beispielsweise bzip2
kleinere Dateien als gzip
, was aber deutlich länger dauern kann. Meiner Erfahrung nach gzip
ist es auf Unix-ähnlichen Systemen universell, aber bzip2
immer noch nicht (obwohl es sehr verbreitet und normalerweise leicht zu bekommen ist).
Wie Wim bemerkte, wird Teer selbst nicht komprimiert. Wenn Sie "Komprimieren" hinzufügen (z. B. um eine .tar.gz- oder .tar.bz2-Datei zu erhalten), komprimieren Sie die gesamte tar-Datei auf einmal. Im Gegensatz dazu komprimiert zip jede Datei einzeln.
Die Effizienz hängt von der Arbeitsbelastung ab. Mit zip können Sie direkt auf einzelne Dateien zugreifen. Mit tar müssen Sie zuerst die unerwünschten (komprimierten) Dateien durchsuchen. Die Komprimierungsleistung hängt davon ab, was Sie komprimieren. tar
mit bzip2
ist oft besser für eine große Anzahl ähnlicher Dateien (zB ein Quellverzeichnis). zip
könnte besser sein, wenn jede Datei sehr unterschiedlichen Inhalt hat.
Zip-Archive enthalten am Ende ein zentrales Verzeichnis ihres Inhalts (wahrscheinlich müssen Sie das Verzeichnis nicht vorher erstellen, wenn Sie noch nicht wissen, was sich darin befindet). Dies ermöglicht das schnelle Extrahieren einzelner Dateien, ohne das gesamte Archiv entpacken zu müssen: Lesen Sie einfach das Archivverzeichnis und extrahieren Sie nur das, was benötigt wird. Dies setzt jedoch voraus, dass auf das gesamte Archiv zugegriffen werden kann, und erfordert einen wahlfreien Zugriff, der nur auf Blockgeräten (Disketten, Festplatten) möglich ist. Darüber hinaus ist das Archivverzeichnis verwundbar: Wenn das Archiv aus irgendeinem Grunde abgeschnitten wird, ist es schwer wizardry erfordert zu extrahieren etwas nützlich aus dem Archiv.
Zip-Archive wurden für die Verwendung durch BBS erstellt, bei denen es wichtig war, den Inhalt eines Verzeichnisses in eine einzige (und komprimierte) Datei zu bündeln, anstatt möglicherweise Tausende von Einzeldateien herunterladen zu müssen. Aus den gleichen Gründen bündeln die meisten Websites ihre Downloads auch heute noch.
Tar-Archive wurden entwickelt, um Backups zu bündeln, die für Bandlaufwerke und damit für den sequentiellen Zugriff verwendet werden sollen . Es gibt kein zentrales Verzeichnis. Stattdessen enthält das Archiv in regelmäßigen Abständen Header-Blöcke, die angeben, welche Dateien in den nächsten Blöcken folgen werden. Tar-Archive sollen auf einen Schlag gelesen werden; Wenn nur eine einzelne Datei extrahiert werden soll, wird das Archiv von Anfang an nacheinander gelesen, bis die angeforderte Datei gefunden wurde (die auch ganz am Ende stehen kann). Hinzu kommt die Komprimierung. jede der verschiedenen Komprimierungsprogrammen, die tar - Archive angelegt werden ( compress
, gzip
,bzip2
etc.) sind Stream-Kompressoren und verändern in keiner Weise die Abfolge des Archivs. Im schlimmsten Fall benötigen Sie etwas mehr Blöcke, bis Sie mit dem Extrahieren beginnen können.
Dies mag nach einem geringfügigen Unterschied klingen, stellt jedoch in der Philosophie ein genaues Gegenteil dar. Bei zip-Archiven muss immer die gesamte Datei zur Hand sein, um nützliche Funktionen ausführen zu können, wohingegen ein tar-Archiv in eine Pipeline übertragen werden kann. Ich kann ein großes Teer-Archiv herunterladen und sofort mit dem Extrahieren beginnen, sobald die ersten Blöcke eingegangen sind (und möglicherweise den Download unterbrechen, sobald ich die gesuchte Datei erhalte). Bei einem Zip-Archiv muss ich warten, bis das Archivverzeichnis angezeigt wird, das ganz am Ende des Archivs steht. Sobald ich jedoch die gesamte Datei zur Hand habe, wird das Extrahieren von Teilinhalten aus einer TAR-Datei viel schneller gehen.
Beide Formate haben je nach Verwendungszweck und Verwendungszweck eine besondere Stärke. Da Pipelines (und damit der Gedanke, Daten von einem Prozess zum anderen zu streamen) nur in der Unix-Welt existieren, geht der Hauptvorteil von tar-Archiven auf anderen Systemen verloren, weshalb Zip-Archive dort weitaus beliebter sind. Aber tar-Archive sind flexibler, deshalb bevorzuge ich sie, wenn ich die Wahl habe.
Wie der andere bereits sagte, erstellt tar einen großen "Block" aller Dateien, die mit einem Stream-Prozessor wie gzip oder bzip2 komprimiert werden können.
Dies hat den Nachteil, dass Sie die gesamte Datei dekomprimieren müssen, um auf eine Datei im Archiv zuzugreifen.
Dies hat den Vorteil, dass das Komprimierungsverhältnis normalerweise höher ist, insbesondere wenn die komprimierten Dateien sehr ähnlich sind.
Andere Packer wie "rar" haben einen "Block-Modus" (oder ähnlich), um den gleichen Effekt zu erzielen.