2008-11-08 5 views
13

Предположим, что есть g.g и b.gz.Есть ли слияние GZIP, которое объединяет два файла GZIP без их распаковки?

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

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

$ кошки a.gz b.gz> c.gz

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

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

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

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

ИЛИ, вы могли бы указать мне на эту программу было бы очень полезно для управления файлами журналов, как слияние 365 (день) сжат GZIP лог-файлов в один;..)

Спасибо.

+0

Просто из любопытства, * почему * вы хотели бы это сделать? Если вы просто хотите представить что-то в виде одного файла, почему бы не просто сменить его? – 2008-11-08 01:41:21

+1

Если у вас есть структура MVC и вы хотите ускорить доставку шаблона заголовка, шаблона динамического контента и шаблона нижнего колонтитула, вы можете выбрать сжатие. Если вы сжимаете шаблон заголовка и шаблон нижнего колонтитула заранее, это может ускорить работу. – yogman 2008-11-08 06:31:06

ответ

32

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

На самом деле, все работает отлично. Я просто протестировал его. Он даже задокументирован (вроде) на странице gzip man.

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 
4

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

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

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

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

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