실제로 압축 해제하지 않고 gzip 파일의 압축되지 않은 크기를 얻으려면 어떻게해야합니까?


25

내 OS 세부 정보를 찾으십시오.

$ uname -a
AIX xxyy 1 6 000145364C00

gzip 아카이브에서 파일 크기를 얻으려면 다음 명령을 시도했습니다.

$ gzip -l mycontent.DAT.Gz
compressed  uncompr.   ratio   uncompressed_name
-1223644243 1751372002 -75.3%  mycontent.DAT.Gz

압축이 풀린 크기를 해석하는 방법을 잘 모르겠습니다. 압축 파일 크기는 4GB에 가깝습니다.

따라서 올바른 데이터를 캡처하기 위해이 옵션을 시도했습니다.

$ zcat mycontent.DAT.Gz | wc -c

이 오류가 발생합니다.

mycontent.DAT.Gz.Z:A file or directory in the path name does not exist.
0

소스 파일을 압축 해제하지 않고 쉘 스크립트에서이 값을 캡처하는 방법을 알려주시겠습니까?


아카이브의 무결성에 대해 확신하십니까? 자체 압축 크기를 ~ 1.7G로보고합니다. 실제로 ~ 4GB이면 문제가 있다고 생각합니다.
terdon

답변:


26

질문 제목에 대답하려면 다음을 수행하십시오.

실제로 압축 해제하지 않고 gzip 파일의 압축되지 않은 크기를 얻으려면 어떻게해야합니까?

분명히 아시다시피, 옵션 -l( --list)은 일반적으로 압축되지 않은 크기를 보여줍니다.
표시되는 내용은 데이터에서 계산되지 않지만 압축 파일의 일부로 헤더에 저장되었습니다.

귀하의 경우, -l어떤 이유로 옵션이 작동하지 않습니다.
그러나 원시 압축 데이터에서 압축되지 않은 크기를 '측정'하는 것은 불가능합니다. 압축 된 데이터에 다른 정보는 없습니다. 압축 지점이 필요하지 않은 것은 제외하므로 놀라운 것은 아닙니다.

압축되지 않은 데이터를 디스크에 저장할 필요는 없습니다 zcat file.gz | wc -c. 올바른 접근 방식입니다. 그러나 @OleTange가 대답 한 zcat것처럼 귀하 는의 데이터가 아닌 것 같습니다 gzip.
대안은 사용하는 gzip옵션을 -d( --decompress)과 -c( --to-stdout와 결합) wc옵션 -c( --bytes) :

gzip -dc file.gz | wc -c

13
-l옵션에는 4GB보다 큰 파일에 대한 버그가 있습니다. bugs.debian.org/cgi-bin/bugreport.cgi?bug=149775
Flimm

6

귀하 zcat는 GNU zcat이 아니라 압축 파일입니다. 시험:

gzcat mycontent.DAT.Gz | wc -c
gzip -dc mycontent.DAT.Gz | wc -c

소스 파일의 압축이 해제됩니다. OP가 원하는 것일 수도 있지만 이것이 질문에 대한 답변이 아닙니다.
Marco

아, 왜 .Z로 끝나는 파일을 찾고 있었는지 설명합니다
Hennes

0

gzip -l은 나를 위해 작동하지 않았습니다 .git -1 ...하지만 이것은 작동했습니다.

unzip -l file.zip

0

웹에서 모든 사이트를 찾고 있으며 파일 크기가 4GB보다 클 때이 문제를 해결하지 않습니다.

내 해결책은 이것입니다 :

[oracle @ base tmp] $ timeout --signal = SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz
    -rw-r--r-- oracle / oinstall 111828 2018-03-03 03:05 oracle.20180303.030001.log
    -rw-r ----- oracle / oinstall 6666911744 2018-03-03 03:05 oracle.20180303.030001.dmp

gz 파일에서 전체 크기를 얻으려면 :

[oracle @ base tmp] $ echo $ (timeout --signal = SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz | awk '{print $ 3}') | grep -o '[[: digit :]] *'| awk '{합계 + = $ 1} 종료 {인쇄 합계}'
    6667023572

1
tarball에만 효과가 있다고 설명하고 정리 한 경우 (시간 초과는 필요없고 grep도 아님)이 방법이 더 좋습니다.
kbolino
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.