2008-11-08 4 views
13

a.gz 및 b.gz가 있다고 가정 해 보겠습니다.두 개의 GZIP 파일을 압축 해제하지 않고 병합하는 GZIP 합병이 있습니까?

$ gzip_merge a.gz b.gz - 출력 c.gz

내가이 프로그램을 가지고 싶습니다. 물론,

c.gz> b.gz

$ 고양이 a.gz이 작동하지 않습니다. a.gz의 마지막 DEFLATE 블록에는 BFINAL이 있고 GZIP 헤더는 b.gz입니다. (RFC1951, RFC1952 참조)하지만 BFINAL을 설정 해제하고 두 번째 GZIP 헤더를 버리고 두 번째 gzip 파일의 바이트 경계를 따라 가면 병합 할 수 있습니다.

사실,이 문제에 대한 오픈 소스 프로그램을 작성하려고했지만 실제로 게시하는 방법을 알지 못했습니다. 그래서 저는 Joel에게 프로그램 관리자로 부탁했습니다. 나는 설명과 방위를 통해 그를 걸었고, 마침내 내가하고 싶은 것을 이해했지만 너무 바빴다 고했습니다. :(

물론

, 내가 하나를 자신을 작성하고 게시하는 내 방식을 시도합니다.하지만 내 일 근무 내 고용주의 재산에 속하기 때문에 나는 혼자 할 수 없습니다 수 있습니다.

어떤 자원 봉사자 있는가 우리는 프로그래머 (나), 출판사 (당신) 또는 프로그래머 (당신), 출판사 (저)로 일할 수 있었고, 필자가 필요로하는 것은 신용이었다. .

또는 해당 프로그램으로 날 지점 수 그것은 하나의 로그 파일을 gzip으로 압축 365 (일) 병합과 같은 로그 파일을 관리하기위한 매우 유용 할 것이다..)

감사합니다.

+0

, * 왜 * 당신은이 작업을 수행 할 것인가? 무언가를 하나의 파일로 표현하고 싶다면 단순히 tar를 사용하는 것이 좋습니다. –

+1

MVC 프레임 워크가 있고 헤더 템플릿, 동적 컨텐트 템플릿 및 바닥 글 템플릿의 전달 속도를 높이려면 압축을 선택하십시오. 미리 머리글 서식 파일과 바닥 글 서식 파일을 압축하면 속도가 빨라질 수 있습니다. – yogman

답변

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 
+1

오, 매력처럼 작동합니다! 고맙습니다! PerlIO :: gzip과 같은 Perl 구현으로 모두 작동한다고 가정합니다. – yogman

+0

파일을 만드는 데는 아무런 문제가 없습니다. 그들을 읽으려면, 최악의 경우 zcat/gunzip에 루프 나 쉘을 사용할 수 있습니다. – Glomek

4

당신은 또한 수 : 한 리눅스/유닉스 분포 zcat 대부분이 할 수있는 내장 것처럼

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

(당신이하지 않는 사람을 위해 그것을 설치할 수 있습니다.)

또는 :

그냥 호기심
zcat a.gz b.gz | gzip -c > c.txt.gz