回答:
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
、サブシェルで呼び出されているため、行は出力され$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が桁区切り文字を数に含めないようにするためにあると思いますか?