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


14

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


Probablemente no pueda vencer al alquitrán, ya que en realidad no se comprime, solo archiva, sin opciones específicas que lo permitan. En respuestas, me encantaría ver pruebas, sin opinión ...
Daniel Beck

1
Depende de cuánta compresión quieras.
ta.speot.is

1
Terminé usando alquitrán y por razones de velocidad todavía no intenté comprimirlo. Fue capaz de completar a tiempo para lo que lo necesitaba. ¡Gracias!
Spike

@DanielBeck, el problema con tar es que no muestran el árbol de directorios. Entonces, incluso para obtener una "vista", necesitamos descomprimir todo el alquitrán. ¿Existen alternativas al alquitrán que muestren la vista de directorio?
Pacerier

Respuestas:


15

Para los directorios, usaría un tarcanalizado bzip2con max-compresión.

una manera 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 planea extraer todo cuando sea necesario.
Sin embargo, si haces desea conseguir un pequeño conjunto de archivos a cabo, no es demasiado malo.

Prefiero llamar a dichos archivos filename.tar.bz2y extraer con la xfjopción ' '.

El tubo de compresión máxima se ve así,

tar cf - dir-a-ser-archivado / | bzip2 -9 -> archive.tar.bz2  
# ^ pipe tarball desde aquí para comprimir ^ en el archivo de almacenamiento. 

Nota: el bzip2método ' ' y más compresión tiende a ser más lento que el normal gzipdesde ' tar cfz'.

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

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

Algunas referencias,

  1. Linux Journal: herramientas de compresión comparadas , 28 de julio de 2005
  2. gzip vs. bzip2 , 26 de agosto de 2003
  3. Un punto de referencia rápido: Gzip vs. Bzip2 vs. LZMA , 31 de mayo de 2005

2
El interrogador preguntó por el método más rápido, ¡comprimir un alquitrán de 100 Gb llevaría toda la vida! Llega un punto en que el espacio en disco es tan barato que tomar eones para exprimir hasta el último bit de redundancia 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 un espacio flojo, comprimir el 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 probablemente no valga la pena comprimir un archivo de 100 GB en su totalidad, no creo que bzip2 lleve 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 adaptativo, por lo tanto, está constantemente buscando nuevas redundancias dentro de su ventana de búsqueda hasta el final del archivo. Sujeto a la homogeneidad de la entropía del archivo, debe ser relativamente lineal. Sería un mal compresor que suponía que tenía todo lo que necesitaba desde el comienzo 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 trabajar ¡Empíricamente con conjuntos de datos de 100GB!
Andy Lee Robinson el

7

Este tipo investigó 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í hay un excelente sitio web donde numerosas utilidades de compresión se han comparado para la velocidad en muchos archivos. Hay muchas otras pruebas en ese sitio que podría mirar para determinar la mejor utilidad para usted.

Gran parte de la velocidad tiene que ver con el programa que utiliza. He usado 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 lo dejaría pasar de la noche a la mañana. O simplemente podría enlodar todo y no comprimirlo ... Personalmente odio descomprimir archivos grandes, así que tendría cuidado si eso es lo que quiere hacer.


0

Prefiero usar

tar cf - dir-to-be-archived/ | bzip2 -9 - > archive.tar.bz2

para mover archivos a otro servidor y convertirlos al mismo tiempo


1
Lo cual ya se sugiere en la respuesta superior de @nik. No es necesario duplicar para enfatizar, solo vota la otra respuesta o agrega un comentario si tienes algo sustantivo pero no quieres dar una respuesta involucrada. ; o)
pbhj
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.