Gewoonlijk kunnen noch gzip noch tar “de absoluut kleinste tar.gz” maken. Er zijn veel compressie-utilities die kunnen comprimeren naar het gz-formaat. Ik heb een bash script geschreven gz99 “ om gzip
, 7z
en advdef
te proberen om het kleinste bestand te krijgen. Om dit te gebruiken om het kleinst mogelijke bestand te maken, voer uit:
tar c path/to/data | gz99 file.gz
Het advdef
hulpprogramma van AdvanceCOMP geeft meestal het kleinste bestand, maar is ook buggy (het gz99
hulpprogramma controleert of het het bestand niet beschadigd heeft voordat het de uitvoer van advdef
accepteert). Om advdef
direct te gebruiken, maakt u file.tar.gz zoals u dat wilt. Voer dan uit:
advdef -z -4 file.tar.gz
Dit zal een standaard gz bestand maken dat gelezen kan worden door gzip en tar als normaal, alleen een klein beetje kleiner. Dit is ongeveer het beste wat je kunt doen met het gz formaat.
Aangezien je pas onlangs hebt geleerd dat tar kan comprimeren, en niet hebt gezegd waarom je het kleinste ”.tar.gz" bestand wilde, weet je misschien niet dat er efficiëntere formaten zijn die met tar bestanden gebruikt kunnen worden, zoals xz. Over het algemeen kan overschakelen naar een ander formaat een veel betere compressie geven dan rommelen met gzip opties. Het grootste nadeel van xz is dat het niet zo gangbaar is als gzip, dus de mensen naar wie je het bestand stuurt moeten misschien een nieuw pakket installeren. Het is ook een beetje trager, vooral bij het comprimeren. Als dit voor jou niet uitmaakt, en je echt het kleinste tar bestand wilt, probeer dan:
tar cv path/to/data | xz -9 > file.tar.xz
Moderne versies van tar, bijvoorbeeld op Ubuntu 13.10, detecteren automatisch gecomprimeerde bestanden. Dus zelfs als je xz compressie gebruikt, kun je nog steeds decomprimeren zoals gewoonlijk:
tar xvf file.tar.xz
Om een snel idee te geven hoe deze compressie utilities zich verhouden, bekijk het effect van het comprimeren van patch-3.1.1 uit de 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 dit triviale voorbeeld zien we dat om de kleinste gz te krijgen we advdef nodig hebben (hoewel 7z -tgzip bijna net zo goed is en een stuk minder buggy). We zien ook dat overschakelen naar xz ons veel meer ruimte oplevert dan proberen om het meeste uit het oude gz formaat te halen, zonder dat de compressie te lang duurt.