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 será exibido em No such file or directory
vez de 0. Há um diretório no /import/
diretório, então não posso simplesmente executar um ls
comando, pois ele 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 isto:
A idéia é ocultar o erro "sem esse arquivo" que é impresso no STDERR enviando-o para o bitbucket e usar a função de teste adequada para comparar números. (
-gt
Significa "maior que". Há também-eq
,-lt
,-ge
, etc.)fonte
count=$(find /import -type f -name "*.zip" | wc -l)
ls /import/*.zip
se houver subdiretórios #find
variante.Eu tentei o seu script e, como esperado, quando há arquivos são combinados que não mostram 0 arquivos na saída, mas também mostra o
ls
erro pouco antes. Resolver isso é bastante fácil, não há necessidade de desistirls
. Apenas substitua a primeira linha por esta:2>/dev/null
redireciona o stderr para/dev/null
, suprimindo a mensagem de erro.fonte