2008-11-08 14 views
13

Powiedzmy, że jest a.gz i b.gz.Czy istnieje połączenie GZIP, które łączy dwa pliki GZIP bez ich dekompresji?

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

Chciałbym mieć ten program. Oczywiście,

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

nie działa. Ponieważ ostateczny blok DEFLATE a.gz ma BFINAL, a nagłówek GZIP b.gz. (Patrz RFC1951, RFC1952) Ale jeśli wyzerujesz BFINAL, wyrzucisz drugi nagłówek GZIP i przejdziesz przez granice bajtów drugiego pliku gzip, możesz je scalić.

Właściwie, pomyślałem o napisaniu programu open source w tej sprawie, ale nie wiedziałem, jak go opublikować. Poprosiłem więc Joela, by był moim kierownikiem programu, i przeprowadziłem go przez moje wyjaśnienia i obronę, w końcu zrozumiał, co chcę zrobić, ale powiedział, że jest zbyt zajęty. :(

Oczywiście, mógłbym napisać sobie i spróbować moją drogę, aby go opublikować. Ale nie mogę tego zrobić sam, bo moja praca dzień należący do majątku mojego pracodawcy.

Czy istnieją jakieś wolontariuszy Moglibyśmy pracować jako programista (ja), wydawca (ty) lub programista (ty), wydawca (ja) Wszystko, czego potrzebuję, to trochę kredytu, kiedyś zaimplementowałem maszynę wirtualną Universal Decompressor opisaną w RFC 3320. Więc wiem, że jest to wykonalne .

OR, można wskazać mi ten program byłoby bardzo użyteczne do zarządzania plikami dziennika jak scalanie 365 (dni) spakowane pliki dziennika do jednego;.).

Dzięki.

+0

Tak z ciekawości, * dlaczego * co chcesz to zrobić? Jeśli chcesz tylko reprezentować coś jako pojedynczy plik, dlaczego nie chcesz go po prostu sparsować? –

+1

Jeśli masz szkielet MVC i chcesz przyspieszyć dostarczanie szablonu nagłówka, szablonu treści dynamicznej i szablonu stopki, wybierz kompresję. Jeśli skompresujesz szablon nagłówka i szablon stopki z wyprzedzeniem, może to przyspieszyć działanie. – yogman

Odpowiedz

32

Oczywiście cat a.gz b.gz> c.gz nie działa.

Właściwie działa to dobrze. Właśnie to przetestowałem. Jest nawet udokumentowany (rodzaj) na stronie man 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 
+1

Och, działa jak urok! Dziękuję Ci! Przypuszczam, że wszystko działa z implementacją Perla, jak PerlIO :: gzip. – yogman

+0

Do tworzenia plików nie oczekiwałbym żadnego problemu. Aby je odczytać, w najgorszym przypadku możesz użyć pętli lub powłoki do zcat/gunzip. – Glomek

4

Można też:

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

tak długo, jak dystrybucja Linux/Unix zcat wbudowane, których większość z nich zrobić (i można zainstalować go dla tych, które tego nie robią).

Alternatywnie:

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