¿Existe una fusión GZIP que combina dos archivos GZIP sin descomprimirlos?
Pregunta
Digamos que hay a.gz y b.gz.
$ 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 DEFLATE final de a.gz tiene BFINAL y el encabezado GZIP de b.gz. (Consulte RFC1951, RFC1952) Pero si desarma BFINAL, deseche el segundo encabezado GZIP y recorra los límites de bytes del segundo archivo gzip, puede fusionarlo.
De hecho, pensé en escribir un programa de código abierto para este asunto, pero no sabía cómo publicarlo. Así que le pedí al Joel que fuera mi gerente de programa, y ??lo guié a través de mi explicación y defensa, finalmente entendió lo que quería hacer, pero dijo que estaba demasiado ocupado. :(
Por supuesto, podría escribir uno yo mismo y tratar de publicarlo. Pero no puedo hacer esto solo porque mi trabajo diario 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 de descompresor universal descrita en RFC3320. Entonces sé que esto es factible.
O, podrías indicarme ESE programa. Sería muy útil para administrar archivos de registro como fusionar 365 (día) archivos de registro comprimidos en uno. ;)
Gracias.
Solución
Por supuesto, cat a.gz b.gz > c.gz no funciona.
En realidad, funciona bien. Lo acabo de probar. Incluso está documentado (más o menos) en la página de manual 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
Otros consejos
También podrías:
zcat a.gz b.gz > c.txt && gzip c.txt
siempre y cuando su distribución Linux / Unix tenga integrado zcat, lo que la mayoría de ellos hace (y podría instalarlo para los que no lo tienen)
Alternativamente:
zcat a.gz b.gz | gzip -c > c.txt.gz