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

¿Cómo se especifica el nivel de compresión al utilizar tar -zcvf?

Yo gzip directorios muy a menudo en el trabajo. Lo que hago normalmente es

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

¿Hay alguna manera de especificar el nivel de compresión aquí? Quiero usar la mejor compresión posible aunque me lleve más tiempo comprimir.

Respuestas (5)

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

En lugar de utilizar la bandera gzip para tar, gzip los archivos manualmente después del proceso tar, entonces usted puede especificar el nivel de compresión para el programa gzip:

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

O puede usar

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

El -9 en la línea de comandos de gzip le dice a gzip que utilice el máximo nivel de compresión posible (por defecto es -6).

Edición: Corregida la línea de comando de gzip basada en el comentario de @depesz.

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

Las versiones modernas de tar soportan el formato de archivo xz (GNU tar, desde 1.22 en 2009, Busybox desde 1.17.0 en 2010).

Está basado en lzma2 , algo así como una versión 7-Zip de gz . Esto da una mejor compresión si usted está bien con el requisito de necesitar soporte xz.

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

Acabo de descubrir aquí (básicamente un duplicado de esta pregunta, pero en el stackexchange de Unix) que también hay una variable de entorno XZ_OPT=-9 para controlar el nivel de compresión XZ similar a la de GZIP en el otro 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

Esta es la segunda solución de Matrix Mole, pero ligeramente acortada:

Al llamar a tar, la opción f indica que la salida es un archivo. Ponerla a - (stdout) hace que tar escriba su salida en stdout, que es el comportamiento por defecto sin f y -.

Y como se indica en la página man de gzip, si no se especifican archivos gzip comprimirá desde la entrada estándar. No hay necesidad de - en la llamada a gzip.

La opción --best (equivalente a -9) establece el nivel de compresión más alto.

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

También existe la opción de especificar el programa de compresión mediante -I. Esto puede incluir la opción de nivel de compresión.

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

Y, por supuesto, el tar derivado de macOS bsd tiene que ser diferente:

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