Antworten:
gzip -l foo.gz | awk 'NR==2 {print $2}'
druckt die Größe der unkomprimierten Daten.
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
Alternativ können Sie die Daten dekomprimieren.
if [ -n "$(gunzip <foo.gz | head -c 1 | tr '\0\n' __)" ]; then
echo "foo is not empty"
else
echo "foo is empty"
fi
(Wenn Ihr System nicht head -c
das erste Byte head -n 1
extrahieren muss, extrahieren Sie stattdessen die erste Zeile.)
LC_ALL=C
nicht schaden kann.
read
sie in einer Unterschale aufgerufen wird (und $line
nicht an die übergeordnete Zeile weitergegeben wird ).
tr
behebt das.
Wenn mit "leer" gemeint ist, dass die unkomprimierte Datei 0 Byte gzip --list foo.gz
groß ist, können Sie die Größe der unkomprimierten Datei bestimmen, um sie zu automatisieren. Es sieht ungefähr so aus:
$ gzip --list foo.gz
compressed uncompressed ratio uncompressed_name
24 0 0.0% foo
Bitte beachten Sie, dass das gzip-Dateiformat nur 32 Bit zum Speichern der ursprünglichen Dateigröße zulässt, sodass die Nummer dort die Größe modulo 2 ^ 32 ist. Daher ist die durch "gzip -l" angegebene Größe kein endgültiger Test für die Leere.
LC_ALL=C
aus, dass gzip nicht tausend Trennzeichen in Zahlen einfügt, damit das Feld mit Null verglichen werden kann.