Como posso verificar se um arquivo gzip está vazio?

10

Existe uma maneira rápida de verificar se um arquivo com gzip está vazio ou preciso descompactá-lo primeiro?

exemplo:

$ touch foo
$ if [ -s foo ]; then echo not empty; fi
$ gzip foo
$ if [ -s foo.gz ]; then echo not empty; fi
not empty
$ wc -l foo.gz
      1 foo.gz
    
por dogbane 01.02.2011 / 14:34

4 respostas

8

gzip -l foo.gz | awk 'NR==2 {print $2}' imprime o tamanho dos dados não compactados.

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, você pode começar a descomprimir os dados.

if [ -n "$(gunzip <foo.gz | head -c 1 | tr '
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
\n' __)" ]; then echo "foo is not empty" else echo "foo is empty" fi

(Se o seu sistema não tiver head -c para extrair o primeiro byte, use head -n 1 para extrair a primeira linha).

    
por 01.02.2011 / 19:49
4

Se por 'vazio' você quer dizer que o arquivo descompactado é de 0 bytes, você poderia usar gzip --list foo.gz para determinar o tamanho do arquivo descompactado, isso exigiria alguma análise para automatizá-lo. Parece algo assim:

$ gzip --list foo.gz
         compressed        uncompressed  ratio uncompressed_name
                 24                   0   0.0% foo
    
por 01.02.2011 / 16:13
2
test -z $(gzip -cd foo.gz | head -c1) && echo "empty"

Ou com if :

if [ -z $(gzip -cd foo.gz | head -c1) ]; then
  echo "empty"
fi

zcat às vezes é vinculado a gunzip -c ou gzip -cd , se você quiser usá-lo como o "formulário" mais curto.

    
por 01.02.2011 / 14:48
0

Por favor, note que o formato de arquivo gzip só permite 32 bits para armazenar o tamanho original do arquivo, então o número lá é o tamanho do módulo 2 ^ 32. Portanto, o tamanho dado por "gzip -l" não é um teste definitivo para o vazio.

    
por 05.07.2012 / 13:39