如何检查 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 -cgzip -cd,如果您想将其用作较短的“形式”。

答案4

如果 gzip 文件大小为 51,则它是空的。每当我在文件中添加一个字符并对文件进行 gzip 压缩时,压缩文件的大小就会从 51 开始增加。

不过你可以用 zcat 来保证这一点。在 gzip 人中:

对于非 gzip 格式的文件(例如压缩的 .Z 文件),未压缩的大小为 -1。要获取此类文件的未压缩大小,您可以使用:

zcat file.Z | wc -c

相关内容