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 -cdas erste Byte head -n 1extrahieren muss, extrahieren Sie stattdessen die erste Zeile.)
LC_ALL=Cnicht schaden kann.
readsie in einer Unterschale aufgerufen wird (und $linenicht an die übergeordnete Zeile weitergegeben wird ).
trbehebt das.
Wenn mit "leer" gemeint ist, dass die unkomprimierte Datei 0 Byte gzip --list foo.gzgroß 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=Caus, dass gzip nicht tausend Trennzeichen in Zahlen einfügt, damit das Feld mit Null verglichen werden kann.