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 -c
que extraer el primer byte, use head -n 1
para extraer la primera línea).
LC_ALL=C
no puede hacer daño.
read
se invoca en una subshell (y $line
no se propaga al padre).
tr
arregla eso.
Si por 'vacío' quiere decir que el archivo sin comprimir tiene 0 bytes, podría usarlo gzip --list foo.gz
para 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=C
que existe para garantizar que gzip no ponga miles de separadores en números para que el campo se pueda comparar con cero.