find comando + exe status diff de 0 quando o arquivo não foi encontrado

1

como ativar o comando find para imprimir o exe diff do status de 0 quando o comando find não encontra o arquivo?

de acordo com o meu exemplo quando tento encontrar o arquivo test1.txt, $? definido para 0 mas espero obter valor diff de 0 porque o arquivo não foi encontrado

 [root@om-1 tmp]# touch test.txt
 [root@om-1 tmp]# find /var/tmp -name  test.txt
 /var/tmp/test.txt
 [root@om-1 tmp]# echo $?
                  0
 [root@om-1 tmp]# find /var/tmp -name  test1.txt (test1.txt not under /var/tmp)
 [root@om-1 tmp]# echo $?
                  0
    
por Eytan 10.01.2012 / 13:56

5 respostas

2

Você não pode.

Na página find man:

 EXIT STATUS
        find  exits with status 0 if all files are processed successfully, 
        greater than 0 if errors occur.   This is deliberately
        a very broad description, but if the return value is non-zero, 
        you should not rely on the correctness of the  results  of find.

O status de saída 0 apenas diz: Eu consegui processar todos os arquivos sem erro (por exemplo, problemas de permissão).

Uma solução:

COUNT='find / -type f -name "thisfiledoesnnotexist" -print | wc -l' 
ECHO $COUNT
0
    
por 10.01.2012 / 14:10
1

Considerando que locate retorna 1 quando o arquivo não é encontrado no banco de dados

    
por 10.01.2012 / 14:21
1

Tente a seguinte condição de shell:

[ "$(find /var/tmp -name test.txt)" ] && echo Found || echo Not found

que é basicamente o mesmo que:

[ "$(find /var/tmp -name test.txt)" '!=' '' ] && echo Found || echo Not found
    
por 23.09.2015 / 00:12
0

O status de saída do find deve ser zero em ambos os casos, porque o comando find não falhou. Caso não encontre nenhuma correspondência, ela simplesmente existe normalmente sem imprimir nenhuma saída.

Como solução alternativa, você pode usar algo como:

if [ 'find . -name test1.txt | grep test1.txt | wc -l' -eq 0 ] ; then echo 1 ; else echo 0; fi

No entanto, não tenho certeza sobre o resultado em caso de erro.

    
por 10.01.2012 / 14:21
0

Está usando find obrigatório para você? Você sabe exatamente onde algum arquivo deve estar? Então por exemplo

stat /var/tmp/test.txt; echo $?
stat /var/tmp/test1.txt; echo $?

deve funcionar para você.

    
por 10.01.2012 / 14:32

Tags