압축 해제되지 않은 gzip 파일의 압축되지 않은 크기를 얻거나 최소한 모든 것을 디코딩하는 확실한 방법은 없습니다. 세 가지 이유가 있습니다.
압축되지 않은 길이에 대한 유일한 정보는 gzip 파일의 끝에있는 4 바이트입니다 (리틀 엔디안 순서로 저장 됨). 필요에 따라서 길이는 모듈 길이 2 입니다. 압축되지 않은 길이가 4GB 이상인 경우 길이가 무엇인지 알 수 없습니다. 압축 된 길이가 2/1032 + 18 또는 약 4MB 미만인 경우 압축되지 않은 길이가 4GB 미만임을 확신 할 수 있습니다. (1032는 수축의 최대 압축률입니다.)
둘째로, gzip 파일은 실제로 여러 개의 gzip 스트림을 연결 한 것일 수 있습니다. 디코딩을 제외하고, 각 조각의 4 바이트 비 압축 길이를보기 위해 각 gzip 스트림이 끝나는 위치를 찾는 방법이 없습니다. (어쨌든 첫 번째 이유 때문에 잘못되었을 수 있습니다.) 셋째, gzip 파일은 gzip 스트림이 끝난 후 (일반적으로 0) 정크가있는 경우가 있습니다. 그런 다음 마지막 4 바이트는 길이가 아닙니다.
그래서 gzip -l
은 실제로 작동하지 않습니다. 결과적으로 zlib에 해당 기능을 제공 할 필요가 없습니다.
pigz에는 실제 압축되지 않은 길이를 얻기 위해 사실 전체 입력을 디코딩 할 수있는 옵션이 있습니다 : pigz -lt
, 정답을 보장합니다. pigz -l
은 무엇을합니까? gzip -l
은 잘못된 것일 수 있습니다.
참고 : 비슷한 질문이 있지만 그 중 실제로 zlib 기능이있는 경우 답변이없는 것으로 알고 있습니다. –