1 votes

find command + exe status diff from 0 when file not found

Comment activer la commande find pour imprimer l'état de l'exe différent de 0 quand la commande find ne trouve pas le fichier ?

Selon mon exemple, lorsque j'essaie de trouver le fichier test1.txt, $ ? est mis à 0. mais je m'attends à obtenir une valeur différente de 0 parce que le fichier n'a pas été trouvé.

 [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

2voto

Sven Points 95985

Tu ne peux pas.

De la find page de manuel :

 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.

Le statut de sortie 0 dit simplement : J'ai réussi à traiter tous les fichiers sans erreur (par exemple, des problèmes de permission).

Une solution :

COUNT=`find / -type f -name "thisfiledoesnnotexist" -print | wc -l` 
ECHO $COUNT
0

1voto

Dave Points 41

Alors que locate renvoie 1 lorsque le fichier n'est pas trouvé dans la base de données.

0 votes

locate n'est souvent pas installé par défaut, la base de données peut être obsolète et il est loin d'être aussi flexible que le système find . En revanche, il est beaucoup plus rapide et plus facile à utiliser :)

1voto

Zafar Points 241

Essayez la condition suivante Shell :

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

ce qui revient à peu près au même :

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

0voto

Khaled Points 35208

L'état de sortie de find devrait être zéro dans les deux cas, car la commande find n'a pas échoué. Dans le cas où elle n'a pas trouvé de correspondance, elle existe normalement sans afficher aucune sortie.

Comme solution de contournement, vous pouvez utiliser quelque chose comme :

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

Cependant, je ne suis pas sûr du résultat en cas d'erreur.

0voto

Janne Pikkarainen Points 31244

Est-ce que l'on utilise find obligatoire pour vous ? Savez-vous exactement où doit se trouver un fichier ? Alors, par exemple

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

devrait fonctionner pour vous.

1 votes

Qu'en est-il test -e /var/tmp/test.txt ? C'est ce que le test est pour.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X