Jawaban:
gzip -l foo.gz | awk 'NR==2 {print $2}'
mencetak ukuran data yang tidak terkompresi.
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
Atau Anda dapat mulai membuka kompres data.
if [ -n "$(gunzip <foo.gz | head -c 1 | tr '\0\n' __)" ]; then
echo "foo is not empty"
else
echo "foo is empty"
fi
(Jika sistem Anda tidak perlu head -c
mengekstrak byte pertama, gunakan head -n 1
untuk mengekstrak baris pertama.)
LC_ALL=C
tidak ada salahnya.
read
yang dipanggil dalam subkulit (dan $line
tidak diperbanyak ke induknya).
tr
perbaikan itu.
Jika dengan 'kosong' Anda berarti bahwa file yang tidak dikompresi adalah 0 byte, Anda dapat menggunakan gzip --list foo.gz
untuk menentukan ukuran file yang tidak terkompresi, itu akan memerlukan beberapa penguraian untuk mengotomatiskannya. Itu terlihat seperti ini:
$ gzip --list foo.gz
compressed uncompressed ratio uncompressed_name
24 0 0.0% foo
test -z $(gzip -cd foo.gz | head -c1) && echo "empty"
Atau dengan if
:
if [ -z $(gzip -cd foo.gz | head -c1) ]; then
echo "empty"
fi
zcat
kadang-kadang ditautkan ke gunzip -c
atau gzip -cd
, jika Anda ingin menggunakannya sebagai "formulir" yang lebih pendek.
Harap dicatat bahwa format file gzip hanya memungkinkan 32 bit untuk menyimpan ukuran file asli, jadi nomor ada ukuran modulo 2 ^ 32. Oleh karena itu ukuran yang diberikan oleh "gzip -l" bukanlah tes definitif untuk kekosongan.
LC_ALL=C
apakah ada untuk memastikan bahwa gzip tidak memasukkan ribuan pemisah dalam jumlah sehingga bidang dapat dibandingkan dengan nol?