Même quand /tmp
aucun fichier n'a été appelé something
, la recherche avec find
retournera 0:
$ find /tmp -name something
$ echo $?
0
Comment puis-je obtenir un statut de sortie non nul quand find
ne trouve rien?
Voici une ligne qui, je crois, fait ce que vous voulez:
find /tmp -name something | egrep '.*'
L'état de retour sera 0
quand quelque chose est trouvé et différent de zéro sinon.
Si vous devez également capturer la sortie de find
pour un traitement ultérieur, alors la réponse de Sven a couvert cela.
*
sur laegrep
regex est complètement redondante. Puisque vous n'utilisez pasegrep
la syntaxe d'expression régulière, celagrep
peut prendre quelques microsecondes plus rapidement.find ... | read
La solution la plus simple qui n'imprime pas, mais quitte 0 lorsque les résultats sont trouvés
la source
La sortie 0 est facile avec find, exit> 0 est plus difficile car cela ne se produit généralement qu'avec une erreur. Cependant, nous pouvons y arriver:
la source
find
ne semble pas dépendre des codes de sortie des programmes-exec
qu’il a exécutés.exec
section, pas sous la valeur de retour). Il ne peut pas différencier rien trouvé et se trouver en erreur (par exemple, quand il a été invoqué sur un point de départ inexistant).Ayant trouvé cette question tout en essayant de trouver un moyen de résoudre un problème avec Puppet (modifier les autorisations sur les dossiers situés dans un répertoire mais pas sur le répertoire lui-même), cela semble fonctionner:
Mon cas d'utilisation spécifique est le suivant:
Ce qui quittera le code 1 si la commande find ne trouve aucun fichier avec les autorisations requises.
la source
Ce n'est pas possible. Find renvoie 0 s'il réussit, même s'il n'a pas trouvé de fichier (résultat correct n'indiquant pas d'erreur lorsque le fichier n'existe pas).
Pour citer la page de manuel de recherche
Selon ce que vous souhaitez réaliser, vous pouvez essayer de trouver
-print
le nom du fichier et de le tester par rapport à sa sortie:la source
exec
/execdir
(utilisé avec+
):If any invocation returns a non-zero value as exit status, then find returns a non-zero exit status.
Je pense que c'est la méthode la plus concise et la plus directe:
la source
-print -quit
, ce qui pourrait répondre à votre préoccupation.Voici un petit script que j'ai appelé
test.py
. Il améliore les autres méthodes publiées en ce sens qu'il renvoie un code d'erreur s'il est défini, et en ajoute un si find ne répertorie aucun fichier:Voici la sortie en ligne de commande:
Ensuite, pour un résultat où find avait des erreurs mais des fichiers trouvés:
Ensuite, si vous voulez la liste de fichiers que vous pouvez utiliser,
-print 0
transmettezfind
et divisez la variable out sur les valeurs null, ou vous pouvez simplement ajouter une instruction print pour elle.la source
Ce n'est pas seulement
find
que renvoie les codes d'état de sortie à zéro lorsqu'il réussit. Sous Unix quelle que soit la commande que vous exécutez, si elle réussit, elle renvoie l'état de sortie à zéro.la source