2014-01-26 4 views
0

단일 gzip 압축 파일 (100GB 비 압축 40GB 압축)이 있습니다. 이제 일부 바이트/바이트 범위를 수정하고 싶습니다 - 나는 파일 크기를 변경하고 싶지 않습니다. 예를 바이트gzip 압축 파일을 수정하는 방법

8 + 10 바이트 5000-40000

는 전체 파일을 다시 압축하지 않고이 가능합니까?

스테판

+0

* 원본 * 파일을 변경 하시겠습니까? 압축 파일이 아닌가요? – bzlm

+0

이 맞습니다. 결과는 압축 된 결과에도 영향을줍니다. 그러나 내가 아는 데이터는 원본 파일의 맨 위에 적용되어야합니다. 원본 파일과의 차이점을 상상해보십시오. 그러나 100GB의 압축을 푸는 데 너무 많은 시간이 걸린 다음 diff를 적용한 다음 거의 동일한 데이터를 다시 압축합니다 (diff는 파일의 약 1-5 % 만 변경합니다). – disaster123

+1

@ disaster123 나는 이론적으로조차도 이것이 작동하지 않는다는 것을 이미 알고 있다는 느낌이 들었습니다. 모든 압축 방법은 입력의 변형에 대해 근본적으로 다른 출력을 생성합니다. – bzlm

답변

0

한마디로 말하면, 하나 이상의 수축 블록을 완전히 같은 비트 수이지만 내용이 다른 새로운 블록으로 교체해야합니다. 새로운 데이터가 수축되면서 압축성이 떨어지면 불가능 해집니다. 압축성이 더 높더라도 비트를 맞추기 위해 많은 노력이 필요합니다. 그리고 그것은 여전히 ​​가능하지 않을 수 있습니다.

-1

gzip을위한 매뉴얼 페이지 "는 회원이 나중에 독립적으로 추출 할 수 있도록 여러 회원들과 하나의 아카이브 파일을 생성하려면, 타르 또는 우편 등의 아카이버를 사용합니다."라고 나는 이것이 gzip 압축이 파일을 통해 계속되는 것을 의미하므로 상황에 민감하므로 원하는 것을 허용하지 않는다고 생각합니다.

압축 해제/패치/재 압축하거나 데이터의 다른 표현으로 전환 할 수 있습니다 (개별 압축 파일의 압축되지 않은 tar 또는 zip 일 수 있으므로 변경할 파일을 압축 해제/압축 해제하면됩니다). 후자 일반적으로 컴팩트하게 데이터를 저장하지는 않지만 사용자가 만들어야하는 단점이 있습니다.

+0

맨 페이지의 인용문은 * 동일한 아카이브 * 내에 여러 파일 *을 저장하고이 중 하나 또는 일부 만 압축 해제 할 수있는 능력에 관한 것이지 재 압축성이나이 질문의 세부 사항이 아닙니다. 이것이 타르 또는 지퍼 인 경우에, 응답은 동일 할 것입니다; 압축 된 스트림을 수정하는 것은 불가능합니다. – bzlm

+0

타르는 압축하지 않습니다. tar 아카이브 수정 *이 가능합니다. Zip은 파일 단위로 압축 (또는 그렇게하도록 구성 할 수 있음)한다고 생각합니다. 개별 파일 추출/대체를 허용합니다.문제는 gzip이 후자의 옵션을 제공했는지 여부였습니다. man 페이지가 그렇게하지 않는다는 강력한 표시로 인용하고 있습니다. 따라서 압축 및 아카이브 분리를 제안하는 bzim 제안은 다른 형식으로도 작동 할 수 있으며 gzip으로는 작동하지 않습니다. 나는 내 대답에 섰다. – keshlam

1

파일 크기를 변경하려는 경우 (결과 gzip은 원본 파일 크기에 따라 레이아웃되지 않으므로) 아무런 차이가 없지만 압축 된 파일을 여러 부분으로 나누어 원하는 부분 수정이 분리 된 청크에 있고 단일 파일 gzip 메서드 대신 다중 파일 압축 메서드를 사용하면 전체 파일의 압축을 풀고 압축하지 않고 변경된 파일 만 업데이트 할 수 있습니다. 당신의 예에서

:

bytes1-7.bin  \ 
bytes8-10.bin  \ bytes.zip 
bytes11-4999.bin /
bytes5000-40000.bin/

는 그런 다음 bytes8-10.binbytes5000-40000.bin하지만 다른 두를 업데이트 할 수 있습니다. 그러나 이것이 더 적은 시간이 걸릴 지 여부는 의심 스럽다.