Answers:
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
改为提取第一行。)
LC_ALL=C
不会造成伤害。
read
在子shell中被调用一样打印行(并且$line
不会传播到父级)。
tr
修复该问题。
如果“空”表示未压缩的文件为0字节,则可以gzip --list foo.gz
用来确定未压缩的文件的大小,这将需要一些解析来使其自动化。看起来像这样:
$ gzip --list foo.gz
compressed uncompressed ratio uncompressed_name
24 0 0.0% foo
LC_ALL=C
想确保gzip不会在数字中放入千位分隔符,以便将该字段与零进行比较吗?