Respuestas:
gzip -l foo.gz | awk 'NR==2 {print $2}' imprime el tamaño de los datos sin comprimir.
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
Alternativamente, puede comenzar a descomprimir los datos.
if [ -n "$(gunzip <foo.gz | head -c 1 | tr '\0\n' __)" ]; then
echo "foo is not empty"
else
echo "foo is empty"
fi
(Si su sistema no tiene head -cque extraer el primer byte, use head -n 1para extraer la primera línea).
LC_ALL=Cno puede hacer daño.
readse invoca en una subshell (y $lineno se propaga al padre).
trarregla eso.
Si por 'vacío' quiere decir que el archivo sin comprimir tiene 0 bytes, podría usarlo gzip --list foo.gzpara determinar el tamaño del archivo sin comprimir, requeriría algún análisis para automatizarlo. Se parece a esto:
$ gzip --list foo.gz
compressed uncompressed ratio uncompressed_name
24 0 0.0% foo
Tenga en cuenta que el formato de archivo gzip solo permite 32 bits para almacenar el tamaño del archivo original, por lo que el número allí es el módulo de tamaño 2 ^ 32. Por lo tanto, el tamaño dado por "gzip -l" no es una prueba definitiva de vacío.
LC_ALL=Cque existe para garantizar que gzip no ponga miles de separadores en números para que el campo se pueda comparar con cero.