faz com que o achado falhe quando nada foi encontrado

7

Quando find é invocado para não encontrar nada, ele ainda sai com o código 0. Existe uma maneira de fazer com que ele retorne um código de saída indicando falha quando nenhum arquivo foi encontrado?

    
por XZS 24.04.2015 / 00:41

2 respostas

7

Se o seu grep suportar a leitura de linhas delimitadas por NUL (como o GNU grep com -z ), você poderá usá-lo para testar se algo foi gerado por find :

find /some/path -print0 | grep -qz .

Para enviar os dados para outro comando, você pode remover a opção -q , permitindo que grep passe os dados inalterados enquanto ainda relata um erro se nada passar:

find /some/path -print0 | grep -z . | ...

Especificamente, ${PIPESTATUS[1]} no bash deve manter o status de saída de grep .

Se o seu find não suportar -print0 , use grep sem -z e espere que as novas linhas nos nomes dos arquivos não causem problemas:

find ... | grep '^' | ...

Nesse caso, usar ^ em vez de . pode ser mais seguro. Se a saída tiver novas linhas consecutivas, ^ irá passá-las, mas . não.

    
por 24.04.2015 / 01:26
3

Você solicita especificamente um código de retorno ... que não vejo nas opções. Mas é assim que resolvi (porque grep -z não está na porta Mac):

Dá código 0 se 1 linha foi encontrada

test 1 == 'find */.kitchen/ -name private_key | wc -l'

Então ...

if [ 0 == 'find */.kitchen/ -name my-file.txt | wc -l' ] ; then
   echo "Nothing found"; exit;
fi

Além disso, como uma solução genérica, isso pode ser útil:

Verifique se o pipe está vazio e execute um comando nos dados se não estiver

    
por 01.12.2017 / 16:24