La forma más rápida de extraer tar.gz

42

¿Hay alguna forma de extraer un archivo tar.gz más rápido que tar -zxvf filenamehere?

Tenemos archivos grandes e intentamos optimizar la operación.

Justin
fuente
2
¿Estás descubriendo que el $ tar -zxvfmétodo está vinculado a IO o CPU?
EEAA
1
Creer en la CPU, ¿cómo puedo verificar?
Justin
55
No está directamente relacionado, pero 'z' no se ha requerido desde 2004 / tar v1.1.5 gnu.org/software/tar/#TOCreleases :)
JamesHannah

Respuestas:

57

pigz es una versión paralela de gzip. Aunque solo usa un solo hilo para la descompresión, inicia 3 hilos adicionales para leer, escribir y verificar el cálculo. Sus resultados pueden variar, pero hemos visto una mejora significativa en la descompresión de algunos de nuestros conjuntos de datos. Una vez que instales pigz, el archivo tar se puede extraer con:

pigz -dc target.tar.gz | tar xf -

TimS
fuente
11
+1. FWIW, también puedes escribir eso como tar -xvf --use-compress-program=pigz filenamehere. ( -zequivale a --use-compress-program=gzip). Alternativamente, incluso puede hacer que gzipsea ​​un enlace simbólico pigzy seguir usándolo -zxvf.
ruakh
2
@ruakh, tuve que poner -xfdespués --use-compress-program=pigz, o recibí un error. Por alguna razón, no fue más rápido que usarlo gzip.
jonderry
Porque bzip2hay pbzip2( ppara paralelo). tar --use-compress-program=pbzip2 -xvf file.tar.bz2.
alfC
¿Hay alguna manera de usar el pvcomando para mostrar el progreso, o un equivalente, mientras se usa la --use-compress-program=pigzbandera? Puedo hacerlo durante la compresión, gnutar --use-compress-program="pigz | pv" -cf target.tar.gz YourDatapero no estoy seguro de cómo hacerlo durante la descompresión / descompresión.
Stefan Lasiewski
13

Si hay muchos, muchos archivos pequeños en la bola de alquitrán, cancele el parámetro 'v', ¡intente nuevamente!

anónimo
fuente
3
Nunca uso -v param. No sé por qué la gente necesita tanto ruido en la consola.
Eimantas
9
@Eimantas Cuando descomprimas algo que contiene muchos archivos de varios gigabytes, querrás alguna indicación de progreso. :)
Michael Hampton
@TimHughes: es muy bueno saberlo, ¡publíquelo como respuesta por separado!
smci
Michael Hampton si tiene archivos de varios gigabytes pero mezclado con una gran lista de archivos pequeños, tiene una buena razón para no usar -v, en mis pruebas locales hace que el alquitrán sea muy lento, especialmente si tiene alquitrán en un servidor remoto a través de la terminal, lo que hago es mirar el directorio du -s para poder ver cómo crece el directorio ...
Luciano Andress Martini
Puede valer la pena usar --checkpoint=NUMBER( mostrar mensajes de progreso cada NÚMERO registro ) en lugar de -v.
Stefan Lasiewski
6

Si quieres ver el progreso usa algo como pv. Aquí hay un ejemplo:

pigz -dc mysql-binary-backup.tar.gz | pv | tar xf -
Tim Hughes
fuente