GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso escludere le directory da grep -R?

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!


Linux
  1. Come posso escludere una directory dal comando ls

  2. Come reindirizzare l'output da grep a cp?

  3. Come posso rimuovere completamente Jenkins da Linux

  4. Come posso eliminare una stampante da CUPS?

  5. Come posso escludere i file per impostazione predefinita con rsync?

Come escludere in Grep

Come escludere file e directory con Rsync

Come creare directory da un file di testo in Linux

Come escludere in Grep Command in Linux

Come escludere i pacchetti dall'aggiornamento di Apt-Get

Come posso scrivere su dmesg dalla riga di comando?