2008-11-08 44 views
13

Giả sử có a.gz và b.gz.Có sự hợp nhất GZIP hợp nhất hai tệp GZIP mà không giải nén chúng không?

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

Tôi muốn có chương trình này. Tất nhiên,

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

không hoạt động. Vì khối DEFLATE cuối cùng của a.gz có BFINAL và tiêu đề GZIP của b.gz. (Tham khảo RFC1951, RFC1952) Nhưng nếu bạn không đặt BFINAL, hãy bỏ đi tiêu đề GZIP thứ hai và đi qua các ranh giới byte của tệp gzip thứ hai, bạn có thể hợp nhất nó.

Thực ra, tôi đã nghĩ đến việc viết một chương trình nguồn mở cho vấn đề này, nhưng không biết cách xuất bản nó. Vì vậy, tôi đã yêu cầu Joel làm người quản lý chương trình của tôi, và tôi hướng dẫn anh ấy thông qua lời giải thích và bảo vệ của tôi, cuối cùng anh ấy đã hiểu những gì tôi muốn làm, nhưng nói rằng anh ấy quá bận. :(

Tất nhiên, tôi có thể viết một bản thân mình và cố gắng theo cách của tôi để xuất bản nó. Nhưng tôi không thể làm điều này một mình vì công việc của tôi ngày thuộc về tài sản của nhà tuyển dụng của tôi.

Có bất kỳ tình nguyện viên Chúng tôi có thể làm việc như lập trình viên (tôi), nhà xuất bản (bạn) hoặc lập trình viên (bạn), nhà xuất bản (tôi) .Tôi chỉ cần một số tín dụng. .

OR, bạn có thể chỉ cho tôi rằng chương trình này sẽ rất hữu ích cho việc quản lý các file bản ghi như sáp nhập 365 (ngày) đã giải nén file log để một;..)

Cảm ơn.

+0

Chỉ cần ra khỏi tò mò, tại sao * * bạn sẽ muốn làm điều này? Nếu bạn chỉ muốn đại diện cho một cái gì đó như là một tập tin duy nhất, tại sao không chỉ tar nó lên? –

+1

Nếu bạn có khung công tác MVC và muốn tăng tốc độ phân phối mẫu tiêu đề, mẫu nội dung động và mẫu chân trang, bạn sẽ chọn nén. Nếu bạn nén mẫu tiêu đề và mẫu chân trang trước, nó có thể tăng tốc độ. – yogman

Trả lời

32

Tất nhiên, cat a.gz b.gz> c.gz không hoạt động.

Thực ra, nó hoạt động tốt. Tôi vừa thử nghiệm nó. Nó thậm chí là tài liệu (loại) trong trang người dùng 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

Ồ, nó hoạt động như một sự quyến rũ! Cảm ơn bạn! Tôi cho rằng tất cả đều hoạt động với một triển khai Perl như PerlIO :: gzip. – yogman

+0

Để tạo tệp, tôi sẽ không gặp vấn đề gì. Để đọc chúng, trong trường hợp xấu nhất bạn có thể sử dụng một vòng lặp hoặc vỏ ra để zcat/gunzip. – Glomek

4

Bạn cũng có thể:

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

miễn là bản phân phối Linux/Unix của bạn đã zcat xây dựng trong, mà hầu hết trong số họ làm (và bạn có thể cài đặt nó cho những người mà không làm.)

Hoặc:

zcat a.gz b.gz | gzip -c > c.txt.gz 
Các vấn đề liên quan