- soluzioni nude -
Se vuoi findsaltare il contenuto della directory trovata, ma continua a cercare in altre directory, usa -prunecome 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.3di GNU find). Questo è un po 'più complicato da usare, perché fa finduscire immediatamente - quindi -quitdeve essere posizionato alla fine del comando:
find . -type d -name somename -exec ... -quit
Affinché ciò funzioni come previsto, si deve assicurare che i -execrendimenti siano veri (in altre parole, uno stato zero ). Se vuoi che lo stato di uscita -execvenga ignorato, in modo che -quitfunzioni 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 findfunziona è 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' -oopzione cambia il giunto in "OR".
Un elemento complicato di -oè che findpuò "ottimizzare" il comando e non eseguire la -execparte se si digita semplicemente
find . -type d -name somename -exec ... -o -quit
Per farcela, puoi forzare finda valutare tutti i predicati associati a "OR", racchiudendoli tra parentesi.