2012-05-17 19 views
12

Ho una directory denominata XYZ che contiene al suo interno le directory ABC, DEF, GHI. Voglio cercare un pattern 'writeText' in tutto * .c in tutte le directory (cioè XYZ, XYZ/ABC, XYZ/DEF e XYZ/GHI) Che comando grep posso usare?grep in tutte le directory

Inoltre, se si desidera cercare solo in XYZ, XYZ/ABC, XYZ/GHI e non in XYZ/DEF, quale comando di grep è possibile utilizzare?

Grazie!

+1

I flag '--recursive' e' --include'/'--exclude' sono probabilmente ciò che si desidera – geoffspear

risposta

24
grep -R --include="*.c" --exclude-dir={DEF} writeFile /path/to/XYZ 
  • -R significa ricorsivo, quindi andrà in sottodirectory della directory che stai grep attraverso
  • --include="*.c" significa "cercare i file che terminano in .c"
  • --exclude-dir={DEF} significa "esclude directory DEF. Se si desidera escludere più directory, fare questo: --exclude-dir={DEF,GBA,XYZ}
  • writeFile è lo schema che si sta greppando per
  • /path/to/XYZ è il percorso della directory che si desidera visualizzare.

Si noti che queste bandiere si applicano a GNU grep, potrebbe essere diverso se si sta utilizzando BSD/SysV/AIX grep. Se stai usando i grep util di Linux/GNU dovresti stare bene.

+0

Grazie. Funziona! – Romonov

3

È possibile utilizzare il seguente comando per rispondere almeno alla prima parte della domanda.

find . -name *.c | xargs grep "writeText" 
+1

ottenere questo messaggio: find. -name * .c | xargs grep "writeText" find: i percorsi devono precedere l'espressione Uso: trovare [percorso ...] [espressione] – Romonov

+0

Io lavoro nella mia macchina Ubuntu. Puoi provare a usare solo la ricerca. -name * .c, e condividi il risultato. –

+0

Stesso messaggio. Il mio sistema è redhat. – Romonov

-1

Questo ha funzionato per me. Ho modificato un po 'per i miei bisogni. Sto usando Macintosh OSX 10.8.3 dall'app Terminal.

Invece di "* .c" ho utilizzato "util" -questo è parte di ciascun nome file che volevo cercare tra i molti altri file presenti nella directory.

Nella mia situazione non avevo bisogno di "--exclude-dir" perché stavo cercando tutte le sotto-directory sotto la mia posizione corrente.

Nel file di scrittura ho usato (con le virgolette) "utilization =" o "request" che erano due delle stringhe che volevo trovare nei file.

Ho quindi utilizzato un "." per indicare che volevo iniziare la ricerca nella directory corrente.

Quindi uso un> /[path]/[filename.txt] per indicare che volevo che tutto l'output fosse aggiunto a un file di testo.

Grazie.

Problemi correlati