Je cherche la chaîne foo=
dans des fichiers texte dans une arborescence de répertoires. C'est sur une machine Linux commune, j'ai le shell bash :
grep -ircl "foo=" *
Dans les répertoires se trouvent également de nombreux fichiers binaires qui correspondent à "foo="
. Comme ces résultats ne sont pas pertinents et ralentissent la recherche, je veux que grep saute la recherche de ces fichiers (principalement des images JPEG et PNG). Comment dois-je procéder ?
Je sais qu'il y a les --exclude=PATTERN
y --include=PATTERN
mais quel est le format du modèle ? La page de manuel de grep dit :
--include=PATTERN Recurse in directories only searching file matching PATTERN.
--exclude=PATTERN Recurse in directories skip file matching PATTERN.
Recherche sur grep include , grep include exclude , grep exclude et les variantes n'ont rien trouvé de pertinent
S'il existe un meilleur moyen de n'effectuer des recherches que dans certains fichiers, je suis tout à fait d'accord ; déplacer les fichiers incriminés n'est pas une option. Je ne peux pas rechercher uniquement dans certains répertoires (la structure des répertoires est un grand désordre, avec tout partout). De plus, je ne peux rien installer, je dois donc me contenter d'outils courants (tels que grep ou la proposition trouver ).
14 votes
Juste pour info, les arguments utilisés : -c compte les correspondances dans le fichier -i insensible à la casse -l affiche uniquement les fichiers correspondants -r récursif
73 votes
Un moyen plus rapide d'exclure les répertoires svn est le suivant
--exclude-dir=.svn
donc grep n'y entre pas du tout.26 votes
Quelques points pédants à connaître : 1. Notez l'absence de guillemets autour du glob ici : --exclude=' .{png,jpg}' ne fonctionne pas (du moins avec ma version de GNU grep) car grep ne supporte pas {} dans ses globs. Ce qui précède est étendu par l'interpréteur de commandes à '--exclude= .png --exclude=*.jpg' (en supposant qu'aucun fichier ne corresponde dans le cwd - ce qui est hautement improbable puisque vous ne commencez normalement pas les noms de fichiers avec '--exclude='), ce que grep apprécie parfaitement. 2. --exclude est une extension GNU et ne fait pas partie de la définition POSIX de grep, donc si vous écrivez des scripts l'utilisant, sachez qu'ils ne fonctionneront pas nécessairement sur des systèmes non-GNU.
2 votes
Exemple complet d'utilisation d'un répertoire d'exclusion :
grep -r --exclude-dir=var "pattern" .