Normalerweise können weder gzip noch tar "das absolut kleinste tar.gz" erzeugen. Es gibt viele Komprimierungsprogramme, die in das gz-Format komprimieren können. Ich habe eine Bash - Skript „geschrieben gz99 “ , um zu versuchen gzip
, 7z
und advdef
die kleinste Datei zu erhalten. So erstellen Sie mit dieser Option den kleinstmöglichen Dateilauf:
tar c path/to/data | gz99 file.gz
Das advdef
Hilfsprogramm von AdvanceCOMP gibt normalerweise die kleinste Datei an, ist aber auch fehlerhaft (das gz99
Hilfsprogramm überprüft, ob die Datei nicht beschädigt wurde, bevor die Ausgabe von akzeptiert wird advdef
). Für die advdef
direkte Verwendung erstellen Sie file.tar.gz, wie Sie möchten. Dann renne:
advdef -z -4 file.tar.gz
Dadurch wird eine Standard-GZ-Datei erstellt, die von GZIP und TAR wie gewohnt gelesen werden kann und nur ein kleines bisschen kleiner ist. Dies ist ungefähr das Beste, was Sie mit dem gz-Format machen können.
Da Sie erst kürzlich erfahren haben, dass tar komprimiert werden kann, und nicht angegeben haben, warum Sie die kleinste ".tar.gz" -Datei haben möchten, wissen Sie möglicherweise nicht, dass mit tar-Dateien wie xz effizientere Formate verwendet werden können. Im Allgemeinen kann der Wechsel zu einem anderen Format die Komprimierung erheblich verbessern, als wenn Sie mit den gzip-Optionen herumspielen. Der Hauptnachteil von xz ist, dass es nicht so häufig ist wie gzip, sodass die Personen, an die Sie die Datei senden, möglicherweise ein neues Paket installieren müssen. Es ist auch etwas langsamer, insbesondere beim Komprimieren. Wenn Ihnen das egal ist und Sie wirklich die kleinste TAR-Datei wollen, versuchen Sie Folgendes:
tar cv path/to/data | xz -9 > file.tar.xz
Moderne Versionen von tar, zum Beispiel unter Ubuntu 13.10, erkennen komprimierte Dateien automatisch. Selbst wenn Sie die xz-Komprimierung verwenden, können Sie sie wie gewohnt dekomprimieren:
tar xvf file.tar.xz
Um einen kurzen Überblick über den Vergleich dieser Komprimierungsprogramme zu erhalten, betrachten Sie den Effekt der Komprimierung von Patch-3.1.1 aus dem Linux-Kernel:
utility cpu format size(bytes)
gzip -9 0.02s gz 105,628
advdef -2 0.07s gz 102,619
7z -mx=9 -tgzip 0.42s gz 102,297
advdef -3 0.55s gz 102,290
advdef -4 0.75s gz 101,956
xz -9 0.03s xz 91,064
xz -3e 0.15s xz 90,996
In diesem einfachen Beispiel sehen wir, dass wir advdef brauchen, um die kleinste gz zu erhalten (obwohl 7z -tgzip fast genauso gut und viel weniger fehlerhaft ist). Wir sehen auch, dass der Wechsel zu xz viel mehr Speicherplatz einnimmt als der Versuch, das alte gz-Format optimal zu nutzen, ohne dass die Komprimierung zu lange dauert.