Existe uma fusão GZIP que mescla dois arquivos GZIP sem os descomprimir?
Pergunta
Vamos dizer que há a.gz e b.gz.
$ gzip_merge a.gz b.gz -output c.gz
Eu gostaria de ter este programa. Claro,
$ cat a.gz b.gz> c.gz
não funciona. Dado que o bloco final do DEFLATE a.gz tem BFINAL, e o cabeçalho de GZIP b.gz. (Consulte RFC1951, RFC1952) Mas se você unset BFINAL, jogar fora o segundo cabeçalho GZIP e caminhada através dos limites de byte do segundo arquivo gzip, você pode fundi-lo.
Na verdade, eu pensei em escrever um programa de código aberto para esta matéria, mas não sabia como para publicá-lo. Então eu perguntei ao Joel para ser meu gerente do programa, e eu andei-lo através da minha explicação e defesa, ele finalmente entendeu o que eu queria fazer, mas disse que ele estava muito ocupado. : (
Claro, eu poderia escrever um para mim e tentar a minha maneira de publicá-lo. Mas eu não posso fazer isso sozinho, porque meu dia de trabalho pertence à propriedade de meu empregador.
Existe algum voluntário? Poderíamos trabalhar como programador (me), publisher (você) ou programador (você), publisher (me). Todos necessidade I é algum crédito. Certa vez, implementou uma Máquina Virtual Universal descompactador descrito no RFC3320. Então, eu sei que isso é viável.
Ou, você poderia apontar-me a esse programa. Seria muito útil para gerenciar arquivos de log como fusão 365 (dia) arquivos de log gzipped a um. ;)
Graças.
Solução
É claro, gato a.gz b.gz> c.gz não funciona.
Na verdade, ele funciona muito bem. Eu só testei. É ainda documentado (tipo de) na página man 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
Outras dicas
Você poderia igualmente:
zcat a.gz b.gz > c.txt && gzip c.txt
desde que sua distribuição Linux / Unix tem zcat construído em, que a maioria deles não (e você pode instalá-lo para os que não o fazem.)
Como alternativa:
zcat a.gz b.gz | gzip -c > c.txt.gz