- solutions nues -
Si vous souhaitez find
ignorer le contenu du répertoire trouvé, mais continuer la recherche dans d'autres répertoires, utilisez -prune
comme suggéré @laebshade. La commande complète devrait alors ressembler à
find . -type d -name somename -prune -exec ...
D'un autre côté, si vous voulez arrêterfind
complètement la recherche et après avoir trouvé le premier répertoire correspondant, alors ce que vous recherchez est -quit
(disponible depuis la version 4.2.3
de GNU find
). Celui-ci est un peu plus délicat à utiliser, car il fait find
sortir immédiatement - il -quit
doit donc être placé à la toute fin de la commande:
find . -type d -name somename -exec ... -quit
Pour que cela fonctionne comme prévu, il faut s'assurer que les -exec
retours sont vrais (en d'autres termes, un statut zéro ). Si vous souhaitez que l'état de sortie de -exec
soit ignoré, afin que cela -quit
fonctionne toujours, vous avez besoin d'une petite astuce:
find . -type d -name somename \( -exec ... -o -true \) -quit
ou
find . -type d -name somename \( -exec ... -o -quit \)
ou
find . -type d -name somename \( -exec ... , -quit \) # a comma before -quit
- quelques explications -
La chose la plus importante sur le find
fonctionnement est que toutes les actions ("tests") sont traitées comme des prédicats logiques interprétés de gauche à droite. Par conséquent, la dernière action (par exemple -quit
) ne sera effectuée que si toute la partie précédente n'est pas retournée fausse . Par défaut, tous les tests sont joints avec un "ET" logique, l' -o
option change le joint en "OU".
Un élément délicat -o
est que vous find
pouvez "optimiser" votre commande et ne pas exécuter la -exec
partie si vous tapez juste
find . -type d -name somename -exec ... -o -quit
Pour y faire face, vous pouvez forcer l' find
évaluation de tous les prédicats jonés avec "OU", en les mettant entre parenthèses.