2011-07-01 18:00:22 +0000 2011-07-01 18:00:22 +0000
149
149

Hoe het compressieniveau opgeven bij het gebruik van tar -zcvf?

Ik gzip heel vaak mappen op mijn werk. Wat ik normaal doe is

tar -zcvf file.tar.gz /path/to/directory

Is er een manier om het compressie niveau hier op te geven? Ik wil de best mogelijke compressie gebruiken, ook al kost het meer tijd om te comprimeren.

Antwoorden (5)

69
69
69
2011-07-01 18:25:45 +0000

In plaats van de gzip vlag voor tar te gebruiken, kun je de bestanden handmatig gzippen na het tar proces, dan kun je het compressie niveau opgeven voor het gzip programma:

tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar

Of je kunt gebruiken:

tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz

De -9 in de gzip opdrachtregel vertelt gzip om het maximaal mogelijke compressie niveau te gebruiken (standaard is -6).

Edit: Vaste pipe opdrachtregel gebaseerd op @depesz commentaar.

55
55
55
2012-12-19 03:03:43 +0000

Moderne versies van tar ondersteunen het xz archiefformaat (GNU tar, sinds 1.22 in 2009, Busybox sinds 1.17.0 in 2010).

Het is gebaseerd op lzma2 , een beetje als een 7-Zip versie van gz . Dit geeft een betere compressie als je xz-ondersteuning nodig hebt.

tar -Jcvf file.tar.xz /path/to/directory

Ik heb zojuist ontdekt here (eigenlijk een dupe van deze vraag, maar dan in de Unix stackexchange) dat er ook een XZ_OPT=-9 omgevingsvariabele is om het XZ compressieniveau te regelen, vergelijkbaar met die van GZIP in de andere post.

XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
34
34
34
2013-02-04 18:17:32 +0000
tar cv /path/to/directory | gzip --best > file.tar.gz

Dit is de tweede oplossing van Matrix Mole, maar dan iets ingekort:

Bij het aanroepen van tar geeft optie f aan dat de uitvoer een bestand is. Door deze op - (stdout) te zetten, schrijft tar zijn uitvoer naar stdout, wat het standaard gedrag is zonder zowel f als -.

En zoals aangegeven door de gzip man pagina, als er geen bestanden zijn opgegeven zal gzip comprimeren vanaf de standaard invoer. Er is geen noodzaak voor - in de gzip aanroep.

Optie --best (gelijk aan -9) stelt het hoogste compressieniveau in.

10
10
10
2016-06-21 04:21:54 +0000

Er is ook de optie om het compressieprogramma op te geven met -I. Dit kan de optie compressieniveau bevatten.

tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
3
3
3
2019-01-19 16:26:40 +0000

En natuurlijk moet macOS bsd-afgeleide tar anders zijn:

tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory