J'utilise beaucoup grep récursif pour trouver des fichiers source avec un contenu spécifique.
grep -Rni "myfunc" .
Sur de grandes bases de code, cela peut être lent, alors j'utilise --incldue pour restreindre les extensions / liste blanche.
grep -Rni --include=*.java "myfunc" .
Cependant, il serait plus efficace d'exclure (d'élaguer) des sous-répertoires entiers, je pense:
grep -Rni --exclude=/.svn/ "myfunc" .
Mais --exclude ne prend en charge que les modèles de fichiers tels que * .java ci-dessus. Comment puis-je exclure des répertoires?
linux
command-line
grep
gabor
la source
la source
Source: https://stackoverflow.com/questions/2799246/grep-excluding-a-specific-folder-using
la source
./dev
seront exclus le long de./foo/bar/dev
. Utiliser--exclude-dir=./dev
pour ne s'appliquer qu'au premier cas.bash grep -r --exclude-dir={dev,sys,proc} PATTERN data
Le seul problème avec le déplacement est que je ne parviens pas à le faire fonctionner pendant mon bash. Dans ce cas, je dois les garder séparés.{}
une seule entrée, vous aurez probablement besoin d'une virgule unaire pour en faire un tableau (vous ne savez pas comment Bash s'en occupe). Au lieu de cela, j'ai fini par créer un alias dans mon .bash_aliases qui parcourt une liste de dossiers que je veux toujours exclure, par exemple .git, .svn, .hg, .cache, puis je les ajoute via une boucle avec--exclude-dir $dir
puis développez ce tableau dans l'alias grep.vous pouvez utiliser find à la place:
OK, donc c'est un peu en arrière, vous obtenez les résultats de grep en premier, puis le chemin. Peut-être que quelqu'un d'autre a une meilleure réponse?
la source
Voici un exemple complet d'un script de l'un de mes projets qui pourrait aider. J'appelle ce fichier "all_source" (marqué comme exécutable) et le mets dans le répertoire racine de mon projet, puis je l'appelle comme si
grep myfunc $(./all_source)
la sorte à la fin du script était totalement optionnel.Ce script renvoie tous les noms de fichiers du projet qui correspondent
*.h, *.cpp, *.c, *.lua, *.*awk
, mais ne recherche pas dans tous les dossiers nommés .svn et gen, ni ignore les dossiers pour./lib
et./vc6
(mais uniquement ceux situés à la racine du projet). Ainsi, lorsque vous le faites, vous ne faitesgrep myfunc $(./all_source)
que des greps dans ces fichiers. Vous devrez également appeler cela à partir du répertoire racine du projet.la source
Il y a aussi l'option -prune pour trouver:
la source
Vous pouvez essayer de faire ceci:
Exemple: si vous ne souhaitez pas rechercher le contenu dans les fichiers journaux, procédez comme suit:
la source