Existe uma maneira de mostrar “Arquivo não encontrado” ou uma mensagem semelhante ao usar o comando 'find'?

1

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!

    
por jimm-cl 13.05.2014 / 16:46

2 respostas

0

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

    
por 13.05.2014 / 16:59
2

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.

    
por 13.05.2014 / 17:10

Tags