Существует ли слияние GZIP, которое объединяет два файла GZIP, не распаковывая их? - PullRequest
14 голосов
/ 08 ноября 2008

Допустим, есть a.gz и b.gz.

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

Я бы хотел иметь эту программу. Конечно,

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

не работает. Потому что последний блок DEFLATE a.gz имеет BFINAL и заголовок GZIP b.gz. (См. RFC1951, RFC1952) Но если вы сбросили BFINAL, выбросили второй заголовок GZIP и прошли через байтовые границы второго файла gzip, вы можете объединить его.

На самом деле я думал написать программу с открытым исходным кодом для этого вопроса, но не знал, как ее опубликовать. Поэтому я попросил Джоэла быть моим руководителем программы, и я провел его через мои объяснения и защиту, он, наконец, понял, что я хотел сделать, но сказал, что он слишком занят. (

Конечно, я мог бы написать сам и попробовать опубликовать его. Но я не могу сделать это в одиночку, потому что моя дневная работа принадлежит собственному работодателю.

Есть ли добровольцы? Мы могли бы работать программистом (я), издателем (вы) или программистом (вы), издателем (я). Все, что мне нужно, это немного кредита. Однажды я реализовал Виртуальную машину с универсальным декомпрессором, описанную в RFC3320. Так что я знаю, что это возможно.

ИЛИ, вы можете указать мне НА ЭТО программу. Это было бы очень полезно для управления файлами журналов, такими как объединение 365 (день) сжатых файлов журнала в один. ;)

Спасибо.

Ответы [ 2 ]

34 голосов
/ 08 ноября 2008

Конечно, cat a.gz b.gz> c.gz не работает.

На самом деле, это работает просто отлично. Я только что проверил это. Это даже задокументировано (вроде) на странице руководства 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
6 голосов
/ 13 июля 2012

Вы также можете:

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

пока ваш дистрибутив Linux / Unix имеет встроенный zcat, что делает большинство из них (и вы можете установить его для тех, которые этого не делают).

В качестве альтернативы:

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