Réponses:
gzip -l foo.gz | awk 'NR==2 {print $2}'
imprime la taille des données non compressées.
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
Vous pouvez également commencer à décompresser les données.
if [ -n "$(gunzip <foo.gz | head -c 1 | tr '\0\n' __)" ]; then
echo "foo is not empty"
else
echo "foo is empty"
fi
(Si votre système n'a pas head -c
à extraire le premier octet, utilisez head -n 1
plutôt pour extraire la première ligne.)
LC_ALL=C
peux pas faire de mal.
read
est invoquée dans un sous-shell (et $line
n'est pas propagée au parent).
tr
résout cela.
Si par «vide» vous voulez dire que le fichier non compressé fait 0 octet, vous pouvez utiliser gzip --list foo.gz
pour déterminer la taille du fichier non compressé, cela nécessiterait une analyse syntaxique pour l'automatiser. Cela ressemble à ceci:
$ gzip --list foo.gz
compressed uncompressed ratio uncompressed_name
24 0 0.0% foo
Veuillez noter que le format de fichier gzip n'autorise que 32 bits pour stocker la taille du fichier d'origine, donc le nombre est la taille modulo 2 ^ 32. Par conséquent, la taille donnée par "gzip -l" n'est pas un test définitif de vide.
LC_ALL=C
qu'il est là pour s'assurer que gzip ne met pas en milliers de séparateurs en nombre afin que le champ puisse être comparé à zéro?