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
답변
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
대신 첫 번째 행을 추출하는 데 사용하십시오.
답변
‘빈’이라는 의미에서 압축되지 않은 파일이 0 바이트 gzip --list foo.gz
인 경우 압축되지 않은 파일의 크기를 결정하는 데 사용할 수 있으며 파일을 자동화하려면 일부 구문 분석이 필요합니다. 다음과 같이 보입니다 :
$ gzip --list foo.gz
compressed uncompressed ratio uncompressed_name
24 0 0.0% foo
답변
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
경우가 있습니다.
답변
gzip 파일 형식은 원본 파일 크기를 저장하는 데 32 비트 만 허용하므로 크기는 모듈로 2 ^ 32입니다. 그러므로 “gzip -l”에 의해 주어진 크기는 공허함을위한 결정적인 테스트가 아닙니다.