Существует ли слияние GZIP, которое объединяет два файла GZIP без их распаковки?

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

  •  07-07-2019
  •  | 
  •  

Вопрос

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

$ gzip_merge a.gz b.gz - вывод c.gz

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

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

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

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

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

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

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

Спасибо.

Это было полезно?

Решение

Конечно, 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

Другие советы

Вы также могли бы:

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

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

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

zcat a.gz b.gz | gzip -c > c.txt.gz
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top