Существует ли слияние GZIP, которое объединяет два файла GZIP без их распаковки?
Вопрос
Допустим, есть 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