2008-11-08 91 views
13

假設有a.gz和b.gz.是否有GZIP合併合併兩個GZIP文件而不解壓縮?

$ gzip_merge a.gz b.gz - 輸出c.gz

我想有這樣的計劃。當然,

$貓a.gz b.gz> c.gz

不起作用。因爲a.gz的最後一個DEFLATE塊有BFINAL和b.gz的GZIP頭文件。 (請參閱RFC1951,RFC1952)但是,如果您取消設置BFINAL,請丟棄第二個GZIP頭並遍歷第二個gzip文件的字節邊界,您可以合併它。

事實上,我想爲這件事寫一個開源程序,但不知道如何發佈它。於是我請求Joel成爲我的項目經理,然後我通過解釋和辯護走過他,他終於明白我想做什麼,但說他太忙了。 :(

當然,我可以寫一個自己,盡我的方式來發布。但是因爲我的日常工作是屬於我的僱主的財產,我不能單獨做到這一點。

有沒有志願者我們可以像程序員(我),出版商(你)或程序員(你),出版商(我)一樣工作,我需要的只是一些功勞。 。

或者,你可以指向我計劃這將是用於管理像合併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手冊頁中記錄了(有點)。

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