Pregunta ¿Cuál es el método de compresión más rápido para una gran cantidad de archivos?


Necesito comprimir un directorio con alrededor de 350,000 archivos bastante pequeños que ascienden a un total de 100 GB. Estoy usando OSX y actualmente estoy usando la herramienta estándar "Compress" que convierte este directorio en un archivo .zip. ¿Hay una manera más rápida de hacer esto?


11


origen


Probablemente no se puede vencer a tar, ya que en realidad no se comprime, solo se archiva, sin opciones específicas que lo habiliten. En las respuestas, me encantaría ver pruebas, ninguna opinión ... - Daniel Beck♦
Depende la cantidad de compresión que desee. - ta.speot.is
Terminé usando tar y por razones de velocidad no intenté comprimirlo todavía. Pudo completar a tiempo para lo que necesitaba. ¡Gracias! - Spike
@DanielBeck, el problema con el alquitrán es que no muestran el árbol de directorios. Para obtener una "vista", tenemos que descomprimir todo el alquitrán. ¿Hay alternativas al alquitrán que muestra la vista de directorio? - Pacerier


Respuestas:


Para directorios usaría un tar canalizado a bzip2 con compresión máxima.

una forma simple de ir es,

tar cfj archive.tar.bz2 dir-to-be-archived /

Esto funciona muy bien si no tiene la intención de recuperar pequeños conjuntos de archivos del archivo
y solo planean extraer todo cuando sea necesario.
Sin embargo, si tu hacer quiero sacar un pequeño conjunto de archivos, no está mal.

Prefiero llamar a tales archivos filename.tar.bz2 y extraer con el 'xfj' opción.

La tubería de compresión máxima se ve así,

tar cf - dir-to-be-archived / | bzip2 -9 -> archive.tar.bz2
# ^ pipe tarball de aquí a zip-in ^ en el archivo de almacenamiento.

Nota la 'bzip2'método y más compresión tiende a ser más lento de lo normal gzip de 'tar cfz'.

Si tiene una red rápida y el archivo se colocará en una máquina diferente,
puede acelerar con una tubería a través de la red (utilizando efectivamente dos máquinas juntas).

tar cf - dir / | usuario de ssh @ servidor "bzip2 -9 -> /target-path/archive.tar.bz2"
# ^ canalizar tarball sobre la red para comprimir ^ y archivar en la máquina remota.

Algunas referencias

  1. Linux Journal: Herramientas de compresión comparadas28 de julio de 2005
  2. gzip vs. bzip2, 26 de agosto de 2003
  3. Un punto de referencia rápido: Gzip vs. Bzip2 vs. LZMA31 de mayo de 2005

12



El que pregunta preguntó por el método más rápido, ¡bzip de un alquitrán de 100Gb demoraría toda la vida! Llega un punto en el que el espacio en el disco es tan barato que tomar eones para exprimir hasta la última redundancia posible es solo una pérdida de recursos sin sentido, a menos que sea absolutamente necesario. Con la mayor parte del uso del disco ocupado en el espacio libre, aplicar gzip al alquitrán con -1 probablemente haría el trabajo lo suficientemente bien y permitiría pasar a la siguiente tarea unos meses antes. - Andy Lee Robinson
Si bien estoy de acuerdo en que un archivo de 100 GB probablemente no vale la pena comprimirlo en su totalidad, no creo que bzip2 demore linealmente más tiempo para 100 GB en comparación con 1 GB (por ejemplo). Me encantaría ver alguna teoría o datos para mostrar de cualquier manera. - nik
Entiendo que el diccionario de bzip2 es adaptable, por lo tanto, constantemente busca nuevas redundancias dentro de su ventana de búsqueda hasta el final del archivo. Sujeto a la homogeneidad de la entropía del archivo, debería ser relativamente lineal. Sería un mal compresor que asumió que tenía todo lo que necesitaba desde el principio del archivo para poder comprimir el resto rápidamente, pero en algunos casos eso puede ser todo lo que se necesita, aunque hay mejores formas de envejecer que trabajarlo. ¡empíricamente con datasets de 100GB! - Andy Lee Robinson


Esta chico investigado un poco sobre eso. Parece que .zip comprimirá archivos más grandes más rápido. Sin embargo, produce uno de los tamaños de compresión más grandes. También parece que estaba usando las utilidades de Windows, pero apuesto a que la utilidad de OSX está casi tan optimizada.

aquí es un excelente sitio web donde numerosas herramientas de compresión han sido evaluadas para la velocidad en muchos archivos. Hay muchas otras pruebas en ese sitio que puede ver para determinar la mejor utilidad para usted.

Gran parte de la velocidad tiene que ver con el programa que usa. Utilicé la utilidad 7zip para Windows, y creo que es muy rápido. Sin embargo, comprimir muchos archivos lleva mucho tiempo sin importar qué, así que simplemente lo dejaré pasar de la noche a la mañana. O podrías tapar todo y no comprimirlo ... Personalmente odio descomprimir archivos grandes, así que tendría cuidado si eso es lo que quieres hacer.


6