GNU/Linux >> Linux Esercitazione >  >> Linux

Come fermare il comando Trova dopo la prima partita?

C'è un modo per forzare il find comando per interrompere subito dopo aver trovato la prima corrispondenza?

Risposta accettata:

Con GNU o FreeBSD find , puoi usare il -quit predicato:

find . ... -print -quit

Il NetBSD find equivalente:

find . ... -print -exit

Se tutto ciò che fai è stampare il nome e supponendo che i nomi dei file non contengano caratteri di nuova riga, puoi fare:

find . ... -print | head -n 1

Ciò non fermerà find dopo la prima partita, ma possibilmente, a seconda dei tempi e del buffering della seconda partita o (molto) dopo. Fondamentalmente, find verrà terminato con un SIGPIPE quando tenta di produrre qualcosa mentre head è già andato perché ha già letto e visualizzato la prima riga di input.

Nota che non tutte le shell aspetteranno quel find comando dopo head è ritornato. La shell Bourne e le implementazioni AT&T di ksh (quando non interattivo) e yash (solo se quella pipeline è l'ultimo comando in uno script) non lo farebbe, lasciandolo in esecuzione in background. Se preferisci vedere quel comportamento in qualsiasi shell, puoi sempre modificare quanto sopra in:

(find . ... -print &) | head -n 1

Se stai facendo di più che stampare i percorsi dei file trovati, puoi provare questo approccio:

find . ... -exec sh -c 'printf "%sn" "$1"; kill "$PPID"' sh {} ;

(sostituisci printf con qualunque cosa faresti con quel file).

Questo ha l'effetto collaterale di find restituendo uno stato di uscita che riflette il fatto che è stato ucciso.

In realtà, usando il segnale SIGPIPE invece di SIGTERM (kill -s PIPE invece di kill ) farà sì che alcuni proiettili tacciano di più su quella morte (ma restituirebbero comunque uno stato di uscita diverso da zero).


Linux
  1. Trovare file nella riga di comando (come fare per)

  2. Come controllare i permessi con il comando trova

  3. Come trovare file in CentOS 8 sulla riga di comando

  4. Come utilizzare il comando basename?

  5. Come integrare il comando Mv dopo il comando Trova?

Come trovare file in Linux con il comando Trova

Come trovare file sulla riga di comando di Ubuntu

Come trovare file con il comando fd in Linux

Come combinare il comando 'tar' con 'find'

Come scoprire le directory o i file che consumano più spazio?

Come cambiare rapidamente la prima parola in un comando Bash?