Cet après-midi, je voulais effectuer une recherche sur les fichiers d'un projet en développement pour retrouver les références à un élément précis dans l'ensemble du code source.
Le problème, c'est que si je lançais une recherche avec un IDE (Netbeans, Dreamweaver, etc), il me sortait toutes les occurences trouvées (parfois plusieurs par page). J'avais plutôt besoin d'extraire la liste des fichiers qui comptaient au moins une référence. J'ai donc préféré utiliser GREP pour faire la recherche.
Par défaut, le programme sort toutes les lignes qui contiennent le terme recherché (j'ai utilisé ici un "lorem" générique pour la démonstration). Dans ce type de situation, mieux vaut utiliser grep avec -r pour que ça soit récursif dans tous les répertoires enfants.
grep -r lorem *
Le problème : mon projet est versionné avec Subversion et j'aimerais pouvoir exclure ce qu'il trouve dans les répertoires .svn. Comment indiquer à grep de ne pas chercher dans ces répertoires ?
Avec l'option --exclude qui permet de définir un pattern :
grep -r --exclude="*\.svn*" lorem *
Ou --exclude-dir pour nommer explicitement un répertoire :
grep -r --exclude-dir=.svn lorem *
Exécutée telle quelle, la commande retournera davantage d'information que le nom des fichiers. On peut épurer les résultats en appliquant l'option -l :
grep -r -l --exclude-dir=.svn lorem *
Qu'on peut aussi regrouper comme ceci :
grep -rl --exclude-dir=.svn lorem *
Ceci aura pour effet d'imprimer seulement le nom des fichiers dans lesquels il trouve une correspondance. C'est aussi plus performant car grep passera au fichier suivant dès qu'il aura trouvé une première occurence dans un fichier.
Une fois notre commande définie correctement, il sera judicieux d'ajouter un alias à notre OS Linux pour être un peu plus productif les fois suivantes :
alias grepsvn='grep -rl --exclude-dir=svn'
Et on teste :
grepsvn lorem *
La liste des fichiers s'affiche correctement. Enfin, sauf si vous utilisez une saveur Windows de Grep. Dans ce cas, vous risquez de devoir obligatoirement entourer les mots clés de recherche et le pattern de guillemets :
grep -r --exclude="*\.svn*" "lorem" *
De plus, il est fort probable que l'option --exclude-dir n'existe pas (comme celui inclut dans UnxUtils).
mardi 15 décembre 2009
0 réponse à "Exclure les répertoires .svn de grep"
S'abonner à :
Publier des commentaires (Atom)