2009-12-12 16 views
7

C'è un modo per utilizzare grep per ignorare alcuni file durante la ricerca di qualcosa, qualcosa di equivalente a svnignore o gitignore? Di solito uso qualcosa del genere quando cerco codice sorgente.come ignorare automaticamente i file in grep

grep -r something * | grep -v ignore_file1 | grep -v ignore_file2 

Anche se potessi impostare un alias per grep per ignorare questi file sarebbe buono.

+0

cercato pochi alias e funzionali derivati, finito con il su e liner ho postato qui sotto. Grande idea! Questa è una nuova aggiunta alla mia shell! – zen

+0

Si potrebbe anche voler controllare la variabile GLOBIGNORE di bash. Ciò consente alla shell di definire il significato di '*'. Non ti aiuta con grep -r, ovviamente, ma è una cosa utile da avere nella tua casella degli strumenti. –

risposta

8

opzione --exclude su grep funziona anche:

grep perl * --exclude=try* --exclude=tk* 

Questo cerca perl in file nella directory corrente esclusione file che iniziano con meta o tk

+0

questo tipo aiuta il mio bisogno, --exclude e --exclude-dir – rampr

+0

Questo è fondamentalmente quello che faccio - tranne che lo trasformo in uno script nella mia directory bin, quindi non c'è quasi nessuna digitazione. – khedron

+0

Ho creato un alias per grep con --exclude ed exclude-dir e molte altre opzioni con i colori, rende il mio grep più facile ora – rampr

1
find . -path ./ignore -prune -o -exec grep -r something {} \; 

cosa che fa è trovare tutti i file nella directory corrente escludendo la directory (o file) denominato "ignora", poi esegue il comando grep -r qualcosa su ogni file trovato nei file non ignorato.

0

Penso che grep non abbia il filtro dei nomi dei file. Per eseguire ciò che si sta tentando di fare, è possibile combinare i comandi find, xargs e grep. La mia memoria non è buono, quindi l'esempio potrebbe non funzionare:

find -name "foo" | xargs grep "pattern" 

Find è flessibile, è possibile utilizzare i caratteri jolly, ignorare caso, o di utilizzare le espressioni regolari. Si consiglia di leggere le pagine di manuale per la descrizione completa.

dopo aver letto il post successivo, apparentemente grep ha il filtro dei nomi dei file.

2

Si potrebbe anche voler dare un'occhiata a ack che, tra molte altre caratteristiche, per impostazione predefinita non ricerca le directory VCS come .svn e .git.

0

Ecco una versione minimalista di .gitignore. Richiede utils standard: awk, sed (perché il mio awk è così zoppo), egrep:

cat > ~/bin/grepignore #or anywhere you like in your $PATH 
egrep -v "`awk '1' ORS=\| .grepignore | sed -e 's/|$//g' ; echo`" 
^D 
chmod 755 ~/bin/grepignore 
cat >> ./.grepignore #above set to look in cwd 
ignorefile_1 
... 
^D 
grep -r something * | grepignore 

grepignore costruisce una semplice clausola di alternanza:

egrep -v ignorefile_one|ignorefile_two 

non incredibilmente efficiente, ma buona per uso manuale

1

uso espansione shell

shopt -s extglob 
for file in !(file1_ignore|file2_ignore) 
do 
    grep ..... "$file" 
done 
Problemi correlati