2009-12-12 7 views
7

Est-il possible d'utiliser grep pour ignorer certains fichiers lors de la recherche de quelque chose, quelque chose d'équivalent à svnignore ou gitignore? J'utilise généralement quelque chose comme ça lors de la recherche du code source.comment ignorer automatiquement les fichiers dans grep

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

Même si je pouvais configurer un alias pour grep d'ignorer ces fichiers serait bon.

+0

essayé quelques dérivés d'alias et de fonction, a fini avec la sur Le paquebot que j'ai posté ci-dessous. Bonne idée! Ceci est une nouvelle addition à ma coquille! – zen

+0

Vous pouvez également consulter la variable GLOBIGNORE de bash. Cela permet au shell d'affiner la signification de '*'. Ne vous aide pas avec grep -r, bien sûr, mais c'est une chose pratique à avoir dans votre boîte à outils. –

Répondre

8

l'option --exclude sur grep travaillera également:

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

Ceci recherche perl dans des fichiers dans le répertoire courant à l'exception des fichiers commençant par essayer ou

tk
+0

ce genre d'aide à mon besoin, --exclude et --exclude-dir – rampr

+0

C'est essentiellement ce que je fais - sauf que je transforme cela en un script dans mon répertoire bin, donc il n'y a presque pas de frappe. – khedron

+0

J'ai créé un alias pour grep avec --exclude et exclude-dir et beaucoup d'autres options avec des couleurs, rend mon grep plus facile maintenant – rampr

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

Qu'est-ce que cela fait est de trouver tous les fichiers dans votre répertoire en cours à l'exception du répertoire (ou fichier) nommé « ignorer », puis exécute la commande grep -r quelque chose sur chaque fichier trouvé dans les fichiers non ignorés.

0

Je pense que grep n'a pas de filtrage de nom de fichier. Pour accomplir ce que vous essayez de faire, vous pouvez combiner les commandes find, xargs et grep. Ma mémoire n'est pas bon, donc l'exemple peut ne pas fonctionner:

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

Recherche est flexible, vous pouvez utiliser des caractères génériques, ignorer la casse, ou utiliser des expressions régulières. Vous pouvez lire les pages de manuel pour une description complète.

après avoir lu le message suivant, apparemment grep a un filtrage de nom de fichier.

2

Vous pouvez également jeter un oeil à ack qui, parmi beaucoup d'autres fonctionnalités, ne recherche pas par défaut les répertoires VCS comme .svn et .git.

0

Voici une version minimaliste de .gitignore. Nécessite utils standard: awk, sed (parce que mon awk est tellement boiteux), 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 construit une clause simple alternance:

egrep -v ignorefile_one|ignorefile_two 

pas incroyablement efficace, mais bon pour une utilisation manuelle

1

utilisation dilatation de l'enveloppe

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