Risposte:
gzip -l foo.gz | awk 'NR==2 {print $2}'
stampa la dimensione dei dati non compressi.
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
In alternativa puoi iniziare a decomprimere i dati.
if [ -n "$(gunzip <foo.gz | head -c 1 | tr '\0\n' __)" ]; then
echo "foo is not empty"
else
echo "foo is empty"
fi
(Se il tuo sistema non deve head -c
estrarre il primo byte, usa invece head -n 1
per estrarre la prima riga.)
LC_ALL=C
non posso far male.
read
viene invocata in una subshell (e $line
non viene propagata al genitore).
tr
risolve.
Se per "vuoto" si intende che il file non compresso è pari a 0 byte, è possibile utilizzare gzip --list foo.gz
per determinare la dimensione del file non compresso, per automatizzarlo richiederebbe qualche analisi. Sembra qualcosa del genere:
$ gzip --list foo.gz
compressed uncompressed ratio uncompressed_name
24 0 0.0% foo
Si noti che il formato del file gzip consente solo 32 bit per la memorizzazione della dimensione del file originale, quindi il numero è la dimensione modulo 2 ^ 32. Quindi la dimensione data da "gzip -l" non è un test definitivo per il vuoto.
LC_ALL=C
ci sia per garantire che gzip non inserisca migliaia di separatori in numeri in modo che il campo possa essere confrontato con zero?