GNU/Linux >> Znalost Linux >  >> Linux

Jak zastavit příkaz Najít po prvním zápase?

Existuje způsob, jak vynutit find příkaz k zastavení ihned po nalezení první shody?

Přijatá odpověď:

S GNU nebo FreeBSD find , můžete použít -quit predikát:

find . ... -print -quit

NetBSD find ekvivalent:

find . ... -print -exit

Pokud vše, co děláte, je tisk názvu a za předpokladu, že názvy souborů neobsahují znaky nového řádku, můžete:

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

To nezastaví find po prvním zápase, ale možná v závislosti na načasování a ukládání do vyrovnávací paměti při druhém zápase nebo (mnohem) později. V podstatě find bude ukončeno SIGPIPE, když se pokusí něco odeslat, zatímco head je již pryč, protože již přečetl a zobrazil první řádek vstupu.

Všimněte si, že ne všechny shelly budou čekat na tento find příkaz za head Vrátil se. Bourne shell a AT&T implementace ksh (pokud není interaktivní) a yash (pouze v případě, že je tento kanál posledním příkazem ve skriptu) by ne, ponechal by jej spuštěný na pozadí. Pokud byste raději viděli toto chování v jakémkoli shellu, můžete vždy změnit výše uvedené na:

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

Pokud děláte víc, než jen tisknete cesty k nalezeným souborům, můžete zkusit tento přístup:

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

(nahraďte printf s tím, co byste s tím souborem dělali).

To má vedlejší účinek find vrací návratový stav odrážející skutečnost, že byl zabit.

Vlastně pomocí signálu SIGPIPE místo SIGTERM (kill -s PIPE místo kill ) způsobí, že některé granáty budou o této smrti mlčet (ale stále vrátí nenulový výstupní stav).


Linux
  1. Jak je zástupný znak * interpretován jako příkaz?

  2. Jak spočítat počet řádků v souboru po zápase Grep?

  3. Jak zjistit počet jader v Ubuntu

  1. Hledání souborů v příkazovém řádku (jak na to)

  2. Jak auditovat oprávnění pomocí příkazu find

  3. Jak zkombinovat příkaz „tar“ s příkazem „najít“

  1. Jak používat příkaz basename?

  2. Jak integrovat příkaz MV po příkazu Najít?

  3. Jak získat n-tý řádek po grepovaném řádku?