gzip 압축 파일이 비어 있는지 확인하는 방법은 무엇입니까?

gzip 압축 파일이 비어 있는지 확인하는 방법은 무엇입니까?

gzip 압축 파일이 비어 있는지 확인하는 빠른 방법이 있습니까? 아니면 먼저 압축을 풀어야 합니까?

예:

$ touch foo
$ if [ -s foo ]; then echo not empty; fi
$ gzip foo
$ if [ -s foo.gz ]; then echo not empty; fi
not empty
$ wc -l foo.gz
      1 foo.gz

답변1

gzip -l foo.gz | awk 'NR==2 {print $2}'압축되지 않은 데이터의 크기를 인쇄합니다.

if LC_ALL=C gzip -l foo.gz | awk 'NR==2 {exit($2!=0)}'; then
  echo foo is empty
else
  echo foo is not empty
fi

또는 데이터 압축 풀기를 시작할 수 있습니다.

if [ -n "$(gunzip <foo.gz | head -c 1 | tr '\0\n' __)" ]; then
    echo "foo is not empty"
else
    echo "foo is empty"
fi

head -c(시스템이 첫 번째 바이트를 추출 할 필요가 없으면 head -n 1대신 첫 번째 줄을 추출하세요.)

답변2

"비어 있음"이 압축되지 않은 파일이 0바이트임을 의미하는 경우 이를 사용하여 gzip --list foo.gz압축되지 않은 파일의 크기를 결정할 수 있으며 이를 자동화하려면 약간의 구문 분석이 필요합니다. 다음과 같습니다.

$ gzip --list foo.gz
         compressed        uncompressed  ratio uncompressed_name
                 24                   0   0.0% foo

답변3

test -z $(gzip -cd foo.gz | head -c1) && echo "empty"

또는 다음을 사용하여 if:

if [ -z $(gzip -cd foo.gz | head -c1) ]; then
  echo "empty"
fi

zcat때로는 더 짧은 "양식"으로 연결되거나 gunzip -c사용 gzip -cd하려는 경우가 있습니다.

답변4

gzip 파일 크기가 51이면 비어 있습니다. 파일에 문자를 추가하고 파일을 gzip으로 압축할 때마다 압축 파일의 크기가 51부터 증가합니다.

하지만 이를 보장하기 위해 zcat을 사용할 수 있습니다. gzip 사람들의 경우:

gzip이 아닌 형식의 파일(예: 압축된 .Z 파일)의 경우 압축되지 않은 크기는 -1입니다. 이러한 파일의 압축되지 않은 크기를 얻으려면 다음을 사용할 수 있습니다.

zcat file.Z | wc -c

관련 정보