Talán kicsit furcsa – és lehet, hogy vannak más eszközök is erre, de hát ..

A következő klasszikus bash paranccsal keresem az összes fájlt, amely tartalmaz némi karakterláncot:

find . -type f | xargs grep "something" 

Nagyon sok fájlom van, több mélységben . A “valami” első előfordulása elegendő számomra, de a keresés folytatja a keresést, és a többi fájl elkészítése hosszú időt vesz igénybe. Amit szeretnék tenni, az olyan, mint egy “visszajelzés” a grep back-től, hogy megtalálja, hogy A megtalálás leállíthatja további fájlok keresését. Lehetséges ilyen?

Válasz

Egyszerűen tartsa a keresés területén:

find . -type f -exec grep "something" {} \; -quit 

Így működik:

A -exec akkor fog működni, amikor a div id = “da7708c38d”>

igaz lesz. És azért, mert a grep 0 (siker / igaz) eredményt ad, amikor div id = “70324 b5a47 “>

egyezik, a -quit aktiválódik.

Válasz

find -type f | xargs grep e | head -1 

pontosan ezt teszi: amikor a head befejeződik, a cső középső elemét” törött csővel “értesítik “jelzés, sorban leáll, és értesíti a find -t. Látnia kell egy olyan értesítést, mint a

xargs: grep: terminated by signal 13 

, amely ezt megerősíti.

Megjegyzések

  • +1 a magyarázatért és az alternatíváért, bár a másik válasz nekem elegánsabbnak tűnik, mivel önellátóbb

Válasz

Ehhez az eszközök megváltoztatása nélkül: (Szeretem az xargs-ot)

#!/bin/bash find . -type f | # xargs -n20 -P20: use 10 parallel processes to grep files in batches of 20 # grep -m1: show just on match per file # grep --line-buffered: multiple matches from independent grep processes # will not be interleaved xargs -P10 -n20 grep -m1 --line-buffered "$1" 2> >( # Error output (stderr) is redirected to this command. # We ignore this particular error, and send any others back to stderr. grep -v "^xargs: .*: terminated by signal 13$" >&2 ) | # Little known fact: all `head` does is send signal 13 after n lines. head -n 1 

Megjegyzések

  • A +1 soha nem tudta, hogy az xargs ilyen multitasking képességekkel rendelkezik – köszönöm a többi megjegyzést is! 🙂

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük