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