você pode tentar find . -name foo | grep \/
para definir o código de saída.
grep procura por qualquer / na saída e retorna o código de saída 1 se nenhum for encontrado
Estou tentando verificar a existência de vários arquivos, sem saber com antecedência onde os arquivos estão localizados. Então, eu pensei em find
como o utilitário de facto para fazer isso ... Ele funciona como esperado, mas o problema é que ele não reconhece a inexistência de arquivos, isto é, Se um arquivo não existir no diretório pesquisado, conforme esperado, ele não será exibido nos resultados.
Eu acho que isso é bom, como o comando find
é destinado a encontrar arquivos, o que realmente existe em primeiro lugar (d'oh). Mas gostaria de saber se existe uma maneira de o comando find
retornar uma mensagem como "Arquivo não encontrado" ou semelhante, para informar que o arquivo não está lá, em vez de falhar (ou ter sucesso) silenciosamente.
Eu pensei que talvez eu pudesse solucionar o problema usando o código de retorno de find
consultando $?
, mas mesmo quando o arquivo não é encontrado, o código de retorno é 0
.
Apenas um exemplo do que tenho ...
find . -name foo.sh
find . -name bar.sh
e o que retorna caso o único arquivo contido nele seja foo.sh
:
./directory/foo.sh
O que eu gostaria de receber é:
./directory/foo.sh
bar.sh not found
Alguém sabe de um sinalizador find
ou qualquer outra alternativa que eu possa usar?
Obrigado!
Eu não acho que encontre tenha a opção de dizer ' o que você procurou não foi encontrado '.
Você pode contar o número de linhas retornadas por find e se for 0, imprima a mensagem 'not found'. Algo como:
#/bin/bash
# put find output to a temp file
find . -name 'foo.sh' > /var/tmp/find.tmp.$$
# count the number of lines
COUNT='wc -l /var/tmp/find.tmp.$$ | awk '{ print $1 }''
if [ $COUNT -eq 0 ]
then
# find didn't return any results, so print message
echo "foo.sh not found"
else
# find returned results, print them
cat /var/tmp/find.tmp.$$
fi
# remove temp file
rm /var/tmp/find.tmp.$$
Isso imprimirá a saída do comando find se houver algum resultado ou ' foo.sh não encontrado ' quando nenhum resultado for encontrado.