grep solo le sottodirectory corrispondono al modello


9

Ho un albero di directory composto da diverse migliaia di sottodirectory, ma spesso ho bisogno di grep solo un piccolo sottoinsieme di quelle directory. Come posso grepsolo quelle sottodirectory che corrispondono a un modello?

Ad esempio, supponiamo di avere queste sottodirectory in cui voglio grep:

...
...
...
/foo
/fooLib
/fooHandler
/fooGizmo
...
...
...

Le ...voci sopra rappresentano le migliaia di altre directory in cui non voglio accedere.

Supponendo che sto cercando tutte le istanze di bar, se lo faccio:

grep -n --recursive bar *

Vorrei trovare quello che sto cercando, ma in tutte le directory. Come posso cercare solo quelle sottodirectory che corrispondono allo schema foo*?


Vuoi cercare solo in /fooe amici? In /fooe /foo/bare /foo/bar/quxcosì via ma no /wibble/foo? In /fooe /wibble/fooma no /foo/bar? In /fooe /foo/bare /wibble/fooma no /elsewhere?
Gilles 'SO- smetti di essere cattivo' il

Risposte:


11

Puoi usare grep e trovare la combinazione come di seguito:

find /{foo,fooLib,fooHandler,fooGizmo} -type f -exec grep -l "test" {} \;

Oppure puoi usare

find /foo* -type f -exec grep -l "test" {} \;

O usando solo grep

grep -R "test" /foo*

Posso farlo senza specificare esplicitamente le sottodirectory? Piuttosto, usando un carattere jolly come foo*?
John Dibling,

@JohnDibling sì, ho aggiornato esattamente quello che stai dicendo :)
Rahul Patil,

Quest'ultimo suggerimento ( grep -R "test" /foo*) è esattamente quello che sto facendo ora, quindi accetterò.
John Dibling,

Grazie per questo. Sto usando il primo modello, ma mi piacerebbe capire alcune cose a riguardo - ad esempio, cosa fanno il finale {}e la barra rovesciata?
random_user_name

Questo fornisce le linee corrispondenti al grep, ma la posizione dei dati (il file in cui si trova) viene persa. C'è un modo per mantenerlo?
Jontia,

0

prova grep foo* <other parts>ad esempio:grep foo* -name "book*"


Se sto cercando tutte le istanze di bartutti i file nelle sottodirectory denominate foo*, dovrebbe essere così grep --recursive bar ./foo*/*:?
John Dibling,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.