Mesmo quando /tmp
não há um arquivo chamado something
, procurá-lo find
retornará 0:
$ find /tmp -name something
$ echo $?
0
Como posso obter um status de saída diferente de zero quando find
não encontra nada?
Aqui está uma frase que acredito que faz o que você quer:
find /tmp -name something | egrep '.*'
O status de retorno será 0
quando algo for encontrado e diferente de zero.
Se você também precisar capturar a saída find
para processamento adicional, a resposta de Sven cobriu isso.
*
noegrep
regex é completamente redundante. Como você não está usandoegrep
sintaxe de expressão regular, a idade antigagrep
pode ser alguns microssegundos mais rápida.find ... | read
Solução mais simples que não imprime, mas sai 0 quando os resultados são encontrados
fonte
A saída 0 é fácil com a localização, a saída> 0 é mais difícil porque isso geralmente acontece apenas com um erro. No entanto, podemos fazer isso acontecer:
fonte
find
não parece depender dos códigos de saída de nenhum-exec
s executado.exec
seção, sem valor de retorno). Ele não consegue diferenciar entre nada encontrado e se vê errando (por exemplo, quando foi chamado em um ponto de partida inexistente).Tendo acabado de encontrar esta pergunta enquanto tentava encontrar minha maneira de resolver um problema com o Puppet (alterar permissões nas pastas em um diretório, mas não no próprio diretório), isso parece funcionar:
Meu caso de uso específico é este:
O que sairá do código 1 se o comando find não encontrar arquivos com as permissões necessárias.
fonte
Não é possível. Find retorna 0 se sair com êxito, mesmo que não tenha encontrado um arquivo (que é um resultado correto, não indicando um erro quando o arquivo realmente não existe).
Para citar a página de manual de localização
Dependendo do que você deseja alcançar, você pode tentar encontrar
-print
o nome do arquivo e testar a saída:fonte
exec
/execdir
(usada com+
):If any invocation returns a non-zero value as exit status, then find returns a non-zero exit status.
Eu sinto que este é o método mais conciso e direto:
fonte
-print -quit
, o que pode resolver sua preocupação.Aqui está um pequeno script que eu chamei
test.py
. Ele aprimora os outros métodos publicados, na medida em que retornará um código de erro se um estiver definido e, adicionalmente, um se encontrar não listou nenhum arquivo:Aqui está a saída da linha de comando:
Em seguida, para um resultado em que find teve erros, mas encontrou arquivos:
Então, se você quiser a lista de arquivos, poderá
-print 0
passarfind
e dividir a variável out em valores nulos ou simplesmente adicionar uma instrução de impressão para ela.fonte
Não é apenas
find
isso que retorna os códigos de status de saída como zero quando é bem-sucedido. No unix, seja qual for o comando que você executa, se for bem-sucedido, ele retornará o status de saída como zero.fonte