Existe-t-il une fusion GZIP qui fusionne deux fichiers GZIP sans les décompresser?

StackOverflow https://stackoverflow.com/questions/274185

  •  07-07-2019
  •  | 
  •  

Question

Disons qu'il y a a.gz et b.gz.

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

J'aimerais avoir ce programme. Bien sûr,

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

ne fonctionne pas. Parce que le bloc final DEFLATE de a.gz a BFINAL et l'en-tête GZIP de b.gz. (Reportez-vous à RFC1951, RFC1952) Mais si vous annulez la définition de BFINAL, jetez le deuxième en-tête GZIP et parcourez les limites en octets du deuxième fichier gzip, vous pouvez le fusionner.

En fait, j’ai pensé écrire un programme open source à ce sujet, mais je ne savais pas comment le publier. J'ai donc demandé à Joel d'être mon responsable de programme, et je l'ai accompagné dans mes explications et ma défense, il a finalement compris ce que je voulais faire, mais a dit qu'il était trop occupé. : (

Bien sûr, je pourrais en écrire un moi-même et essayer de le publier. Mais je ne peux pas y arriver seul parce que mon travail quotidien appartient à la propriété de mon employeur.

Y a-t-il des volontaires? Nous pourrions travailler en tant que programmeur (moi), éditeur (vous) ou programmeur (vous), éditeur (moi). Tout ce dont j'ai besoin, c'est du crédit. Une fois, j'ai implémenté une machine virtuelle Universal Decompressor décrite dans le document RFC3320. Donc, je sais que c'est faisable.

OU vous pouvez m'indiquer CE programme. Cela serait très utile pour gérer les fichiers journaux, comme la fusion de fichiers journaux gzippés 365 jours par jour en un. ;)

Merci.

Était-ce utile?

La solution

  

Bien sûr, cat a.gz b.gz > c.gz ne fonctionne pas.

En fait, cela fonctionne très bien. Je viens de le tester. C'est même documenté (en quelque sorte) dans la page de manuel 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

Autres conseils

Vous pouvez également:

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

aussi longtemps que votre distribution Linux / Unix est dotée de zcat, ce que la plupart d'entre eux possèdent (et vous pouvez l'installer pour ceux qui n'en ont pas.)

Alternativement:

zcat a.gz b.gz | gzip -c > c.txt.gz
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top