Yanıtlar:
gzip -l foo.gz | awk 'NR==2 {print $2}'
sıkıştırılmamış verilerin boyutunu yazdırır.
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
Alternatif olarak, verileri açmaya başlayabilirsiniz.
if [ -n "$(gunzip <foo.gz | head -c 1 | tr '\0\n' __)" ]; then
echo "foo is not empty"
else
echo "foo is empty"
fi
(Sisteminizin head -c
ilk baytı ayıklaması gerekmiyorsa, head -n 1
bunun yerine ilk satırı ayıklamak için kullanın.)
LC_ALL=C
incinemez.
read
bir alt kabukta çağrıldığı için satırı yazdırmaz (ve $line
ana öğeye yayılmaz).
tr
bunu düzeltir.
'Boş' ile sıkıştırılmamış dosyanın 0 bayt olduğunu kastediyorsanız, sıkıştırılmamış dosyanın gzip --list foo.gz
boyutunu belirlemek için kullanabilirsiniz , dosyayı otomatikleştirmek için bazı ayrıştırmalar gerekir. Şuna benziyor:
$ gzip --list foo.gz
compressed uncompressed ratio uncompressed_name
24 0 0.0% foo
Lütfen gzip dosya formatının yalnızca orijinal dosya boyutunu saklamak için 32 bit'e izin verdiğini unutmayın, bu nedenle sayı 2ulo2 boyutundadır. Bu nedenle "gzip -l" tarafından verilen boyut, boşluk için kesin bir test değildir.
LC_ALL=C
alan sıfıra şekilde karşılaştırılabilmesi için gzip sayılarda bin ayırıcılar koymak olmadığından emin olmak için vardır?