count=$(find /import -maxdepth 1 -name '*.zip' | wc -l)
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?
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.)
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.