如何检查 gzip 压缩文件是否为空?

dog*_*ane 11 command-line bash 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
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 10

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
Run Code Online (Sandbox Code Playgroud)

或者,您可以开始解压缩数据。

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

(如果您的系统不必head -c提取第一个字节,请改用head -n 1提取第一行。)