2008-11-08 12 views
13

Digamos que hay a.gz y b.gz.¿Hay una fusión GZIP que fusiona dos archivos GZIP sin descomprimirlos?

$ gzip_merge a.gz b.gz -output c.gz

me gustaría tener este programa. Por supuesto,

$ cat a.gz b.gz> c.gz

no funciona. Porque el bloque final DEFLATE de a.gz tiene BFINAL y el encabezado GZIP de b.gz. (Consulte RFC1951, RFC1952) Pero si desarma BFINAL, tira el segundo encabezado GZIP y recorre los límites de bytes del segundo archivo gzip, puede fusionarlo.

De hecho, pensé en escribir un programa de código abierto para este tema, pero no sabía cómo publicarlo. Entonces le pedí a Joel que fuera mi gerente de programa, y ​​lo acompañé en mi explicación y defensa, finalmente entendió lo que quería hacer, pero me dijo que estaba demasiado ocupado. :(

Por supuesto, podría escribir uno yo mismo e intento mi camino a publicarla. Pero no puedo hacer esto solo porque mi trabajo día pertenece a la propiedad de mi empleador.

¿Hay algún voluntario ? Podríamos trabajar como programador (yo), editor (usted) o programador (usted), editor (yo). Todo lo que necesito es un poco de crédito. Una vez implementé una máquina virtual descompresora universal descrita en RFC3320. Así que sé que esto es factible .

O, ¿me podría apuntar a ese programa sería muy útil para la gestión de archivos de registro, como la fusión de 365 (días) gzipped los archivos de registro a uno;..)

Gracias.

+0

Sólo por curiosidad, ¿por qué * * le gustaría hacer esto? Si solo quieres representar algo como un solo archivo, ¿por qué no simplemente ponerlo en marcha? –

+1

Si tiene un marco MVC y desea acelerar la entrega de una plantilla de encabezado, una plantilla de contenido dinámico y una plantilla de pie de página, debe elegir la compresión. Si comprime una plantilla de encabezado y una plantilla de pie de página de antemano, podría acelerar las cosas. – yogman

Respuesta

32

Por supuesto, cat a.gz b.gz> c.gz no funciona.

En realidad, funciona muy bien. Acabo de probarlo. Incluso está documentado (más o menos) en la página man de gzip.

Multiple compressed files can be concatenated. In this case, gunzip 
    will extract all members at once. For example: 

     gzip -c file1 > foo.gz 
     gzip -c file2 >> foo.gz 

    Then 

     gunzip -c foo 

    is equivalent to 

     cat file1 file2 
+1

¡Oh, funciona como un encanto! ¡Gracias! Supongo que todo funciona con una implementación de Perl como PerlIO :: gzip. – yogman

+0

Para crear los archivos, no esperaría ningún problema. Para leerlos, en el peor de los casos, podrías usar un loop o un shell para zcat/gunzip. – Glomek

4

Usted podría también:

zcat a.gz b.gz > c.txt && gzip c.txt 

el tiempo que su distribución de Linux/Unix ha construido zcat en que la mayoría de ellos lo hacen (y se podía instalarlo para los que no lo hacen.)

alternativa:

zcat a.gz b.gz | gzip -c > c.txt.gz