SOLUZIONE 1 (combina find
e grep
)
Lo scopo di questa soluzione non è trattare con grep
prestazioni ma per mostrare una soluzione portatile:dovrebbe funzionare anche con busybox o versione GNU precedente alla 2.5.
Usa find
, per escludere le directory foo e bar :
find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print
Quindi combina find
e l'uso non ricorsivo di grep
, come soluzione portatile :
find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;
SOLUZIONE 2 (usando il --exclude-dir
opzione di grep
):
Conosci già questa soluzione, ma la aggiungo poiché è la soluzione più recente ed efficiente. Nota che questa è una soluzione meno portabile ma più leggibile dall'uomo.
grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
Per escludere più directory, usa --exclude-dir
come:
--exclude-dir={node_modules,dir1,dir2,dir3}
SOLUZIONE 3 (Ag)
Se cerchi spesso nel codice, Ag (The Silver Searcher) è un'alternativa molto più veloce a grep, personalizzata per la ricerca del codice. Ad esempio, ignora automaticamente i file e le directory elencate in .gitignore
, quindi non devi continuare a passare le stesse ingombranti opzioni di esclusione a grep
o find
.
Versioni recenti di GNU Grep (>=2.5.2) fornire:
--exclude-dir=dir
che esclude le directory corrispondenti al pattern dir
dalle ricerche ricorsive nelle directory.
Quindi puoi fare:
grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
Per ulteriori informazioni sulla sintassi e sull'utilizzo, vedere
- La pagina man di GNU per la selezione di file e directory
- Una risposta StackOverflow correlata Usa la sintassi grep --exclude/--include per non grep attraverso determinati file
Per i vecchi GNU Greps e POSIX Grep , usa find
come suggerito in altre risposte.
Oppure usa semplicemente ack
(Modifica :o Il cercatore d'argento ) e basta!