Respuestas:
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
asumiendo que estás usando bash. En general, configure la variable de entorno GZIP en "-9" y ejecute tar normalmente.
Además, si realmente desea la mejor compresión, no use gzip. Use lzma o 7z.
Y cuando use gzip (que de todos modos es una buena idea por varias razones) considere usar el pigz
programa y no el gzip
.
GZIP_OPT
, el uso debería ser el mismo.
En lugar de usar el indicador gzip para tar, gzip los archivos manualmente después del proceso tar, luego 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 podrías usar:
tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz
El -9 en la línea de comando gzip le dice a gzip que use el nivel de compresión máximo posible (el valor predeterminado es -6).
Editar: línea de comando de tubería fija basada en el comentario de @depesz.
file.tar
, ya que gzip
agrega la extensión ".gz".
f -
? si no hay archivo, entonces es stdin / out
Las versiones modernas de tar admiten 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 proporciona una mejor compresión si está de acuerdo con el requisito de necesitar soporte xz.
tar -Jcvf file.tar.xz /path/to/directory
Acabo de descubrir aquí (básicamente un engaño de esta pregunta, pero en el intercambio de pila de Unix) que también hay una variable de entorno XZ_OPT = -9 para controlar el nivel de compresión XZ similar al de GZIP en la otra publicación.
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
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. Establecerlo en -
(stdout) hace que tar escriba su salida en stdout, que es el comportamiento predeterminado sin ambos f
y -
.
Y como lo indica la gzip
página de manual, si no se especifican archivos, gzip se comprimirá desde la entrada estándar. No hay necesidad -
en la gzip
llamada.
La opción --best
(equivalente a -9
) establece el nivel de compresión más alto.
xz
y pixz
también. Es una excelente manera de controlar la cantidad de subprocesos utilizados para la compresión paralela sin tener que crear un archivo .tar intermedio. Me gusta asítar -cv /path/to/dir | pixz -p4 > output.tpxz
También existe la opción de especificar el programa de compresión usando -I. Esto puede incluir la opción de nivel de compresión.
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
-I
, intentarán tratar todo como un nombre de programa para exec y, por lo tanto, fallarán. Al menos a partir de tar 1.29 en Debian Stretch, esto funciona.
top
y verlo en cualquier lugar entre 200% -400 $ CPU.