2012-12-01 20:47:48 +0000 2012-12-01 20:47:48 +0000
67
67

Hoe verkrijg je maximale compressie met .tar.gz?

Zoals ik het gebruik van tar + gzip begrijp, wordt tar normaal gebruikt om een groep bestanden samen te voegen tot één bestand, en dan wordt gzip gebruikt om dat bestand te comprimeren.

Ik heb onlangs geleerd dat tar ook kan comprimeren.

Omdat ik niet helemaal begrijp hoe compressie werkt @ de kern ervan, heb ik (mogelijk belachelijke) zorgen dat het sturen van een voorgecomprimeerde .tar naar gzip zou kunnen voorkomen dat gzip zo goed comprimeert als het potentieel zou toestaan en dat soort dingen.

Mijn vraag is in wezen: Welke combinatie van argumenten/compressiemethoden moet ik gebruiken om de absoluut kleinste tar.gz te maken, en hoe ziet het commandoregel statement er daarvoor uit?

Antwoorden (4)

118
118
118
2013-01-31 18:55:22 +0000

Of, je kunt tar vertellen om maximale compressie te gebruiken op deze manier:

export GZIP=-9
tar cvzf file.tar.gz /path/to/directory

Daarnaast, om je envvars rommelig te houden, kun je dit doen:

env GZIP=-9 tar cvzf file.tar.gz /path/to/directory
44
44
44
2012-12-02 03:37:18 +0000

Zoals u stelt - “tar kan ook comprimeren”, impliceert dat - tar gegevens niet altijd zelf comprimeert.

Het doet dat alleen wanneer het gebruikt wordt met de z optie. Ook dat niet uit zichzelf, maar - door de getarreerde gegevens door gzip te halen.

Maar in plaats daarvan, zoals opgemerkt in dit antwoord, kun je de twee commando’s pipe-en: tar & gzip zodanig dat u expliciet compressieniveau kunt opgeven voor het gzip commando om de kleinste uitvoergrootte te bereiken.

tar cvf - /path/to/directory | gzip -9 - > file.tar.gz

Hier geeft 9 het maximaal mogelijke compressieniveau aan.

17
17
17
2014-03-10 15:23:08 +0000

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.

6
6
6
2014-02-06 18:25:54 +0000
tar c /path/to/data | gzip --best > file.tar.gz

gzip optie --best (gelijk aan -9) vraagt om het hoogste compressieniveau.