Como verificar se o arquivo zip está vazio no bash

3

Como posso verificar se o arquivo zip está vazio ou não? Eu não posso usar se -s no bash como o arquivo zip nem sempre é zero em tamanho. se o arquivo zip tiver diretórios vazios, eu quero deletar o arquivo para extrair o arquivo.

    
por CBR 19.06.2012 / 00:59

3 respostas

3

Se você tiver as ferramentas Info-ZIP instaladas ( zip , unzip , zipinfo ), poderá usar zipinfo no arquivo zip e enviar a saída para /dev/null . O status será 0 se o arquivo não estiver vazio.

Então:

if zipinfo foo.zip > /dev/null; then
    echo not empty
else
    echo empty
fi
    
por 19.06.2012 / 01:21
1

Se você executar zipinfo -t foo.zip , o status de saída (de $? ) dará um erro se o arquivo zip não tiver nada nele. Na versão que estou executando (3.00), isso será 1 , mas imagino que seja apenas um código de erro geral, portanto, a ambigüidade pode causar outros problemas.

Você também terá que lidar com a saída de texto do comando, que é uma string com informações básicas sobre o arquivo. Creio que esta resposta é semelhante a uma das anteriores.

Edit: Se você quiser evitar o valor de retorno ambíguo (e você está com disposição para grep ), você poderia grep a saída do comando acima para "Arquivo zip vazio". / p>     

por 19.06.2012 / 01:46
0

Se você tem jar instalado, pode usar a opção -t :

jar -tvf file.zip

O Directores terá barras oblíquas para que você possa canalizar para grep :

if jar -tvf file.zip | egrep -v '/$' > /dev/null; then # we have some files!
  unzip file.zip
else
  rm -f file.zip
fi
    
por 19.06.2012 / 01:04