Script de bash para contar o número de arquivos

11

Eu tenho um script e quero exibir mensagens diferentes se um arquivo existir ou não. Eu tenho um script como:

count=ls /import/*.zip | wc -l

echo "Number of files: " $count
if [ "$count" > "0" ]; then
    echo "Import $count files"
else
    echo "**** No files found ****"
fi

No entanto, se não houver arquivos, isso mostrará No such file or directory em vez de 0 arquivos. Existe um diretório no diretório /import/ , portanto, não posso fazer apenas um comando ls , pois isso sempre retornará um valor maior que 0.

Como posso contar o número de arquivos de uma extensão específica (.zip, .gz, etc.) e usar esse valor em um script bash para exibir o número de arquivos e usá-lo em uma instrução if para exibir mensagens diferentes?

    
por Wallace Sean 07.06.2011 / 19:02

3 respostas

14

count=$(find /import -maxdepth 1 -name '*.zip' | wc -l)

    
por 07.06.2011 / 19:09
4

Tente com isso:

count=$(find /import/ -maxdepth 1 -type f -name '*.zip' | wc -l)
...
if [ $count -gt 0 ] ; then
  ...
else
  ...
fi

A idéia é esconder o erro "no such file" que é impresso no STDERR, enviando-o para o bitbucket, e para usar a função de teste apropriada para comparar números. ( -gt significa "maior que". Há também -eq , -lt , -ge , etc.)

    
por 07.06.2011 / 19:07
0

Eu tentei o seu script e, como esperado, quando nenhum arquivo foi encontrado, ele exibe 0 arquivos na saída, mas também mostra o erro ls antes. Resolver isso é muito fácil, não há necessidade de eliminar ls . Basta substituir a primeira linha por isso:

count=$(ls /import/*.zip 2>/dev/null| wc -l)

2>/dev/null redireciona stderr para /dev/null , suprimindo a mensagem de erro.

    
por 07.06.2011 / 20:50