Gzip directorios muy a menudo en el trabajo. Lo que normalmente hago es
tar -zcvf file.tar.gz /path/to/directory
¿Hay alguna manera de especificar el nivel de compresión aquí? Quiero utilizar la mejor compresión posible, incluso si lleva más tiempo comprimir.
linux
compression
tar
gzip
Lazer
fuente
fuente
top
y verlo en cualquier lugar entre 200% -400 $ CPU.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:
O podrías usar:
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.
fuente
tar cvf - /path/to/directory | gzip -9 - > file.tar.gz
file.tar
, ya quegzip
agrega la extensión ".gz".f -
? si no hay archivo, entonces es stdin / outLas 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.
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.
fuente
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 ambosf
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 lagzip
llamada.La opción
--best
(equivalente a-9
) establece el nivel de compresión más alto.fuente
xz
ypixz
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.
fuente
-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.Y, por supuesto, el tar derivado de bsd de macOS tiene que ser diferente:
fuente