- soluzioni nude -
Se vuoi find
saltare il contenuto della directory trovata, ma continua a cercare in altre directory, usa -prune
come suggerito @laebshade. Il comando completo dovrebbe quindi apparire come
find . -type d -name somename -prune -exec ...
D'altra parte, se si desidera interromperefind
completamente la ricerca e dopo aver trovato la prima directory corrispondente, ciò che si sta cercando è -quit
(disponibile dalla versione 4.2.3
di GNU find
). Questo è un po 'più complicato da usare, perché fa find
uscire immediatamente - quindi -quit
deve essere posizionato alla fine del comando:
find . -type d -name somename -exec ... -quit
Affinché ciò funzioni come previsto, si deve assicurare che i -exec
rendimenti siano veri (in altre parole, uno stato zero ). Se vuoi che lo stato di uscita -exec
venga ignorato, in modo che -quit
funzioni sempre, hai bisogno di un piccolo trucco:
find . -type d -name somename \( -exec ... -o -true \) -quit
o
find . -type d -name somename \( -exec ... -o -quit \)
o
find . -type d -name somename \( -exec ... , -quit \) # a comma before -quit
- qualche spiegazione -
La cosa più importante su come find
funziona è che tutte le azioni ("test") sono trattate come predicati logici interpretati da sinistra a destra. Pertanto, l'ultima azione (ad esempio -quit
) verrà eseguita solo se l'intera parte precedente non ha restituito false . Per impostazione predefinita, tutti i test sono uniti con "AND" logico, l' -o
opzione cambia il giunto in "OR".
Un elemento complicato di -o
è che find
può "ottimizzare" il comando e non eseguire la -exec
parte se si digita semplicemente
find . -type d -name somename -exec ... -o -quit
Per farcela, puoi forzare find
a valutare tutti i predicati associati a "OR", racchiudendoli tra parentesi.