Grep -r : le guide pratique pour chercher dans des dossiers

Terminal Linux affichant une commande grep -r en cours d'exécution sur fond de code

Sommaire

Chargement du sommaire…

Générez votre commande grep -r

Composez la commande exacte selon vos besoins.

Commande générée

Temps de lecture estimé : 7 minutes

Points clés à retenir

  • grep -r cherche un motif dans un dossier et tous ses sous-dossiers
  • -R suit les liens symboliques, contrairement à -r
  • –include et –exclude-dir accélèrent les recherches sur gros volumes
  • Combiner -r, -n et -i couvre la majorité des cas d’usage quotidiens
  • ripgrep est une alternative plus rapide pour les gros projets de code

Qu’est-ce que la commande grep -r

La commande grep -r sert à chercher un motif de texte dans tous les fichiers d’un dossier, sous-dossiers compris. C’est la différence majeure avec un grep classique, qui se limite au fichier ou au dossier indiqué sans descendre dans l’arborescence.

Dans mon expérience, j’utilise -r dès que je dois fouiller un projet entier ou un dossier de logs qui contient plusieurs niveaux de répertoires. Sans cette option, il faudrait relancer grep fichier par fichier — un temps perdu que personne n’a envie de subir.

-r ou -R : quelle différence

La version majuscule -R suit les liens symboliques rencontrés dans l’arborescence, alors que -r les ignore par défaut. Sur un serveur où des dossiers sont liés symboliquement vers d’autres partitions, ce détail change complètement le périmètre de la recherche.

Quand la recherche récursive devient nécessaire

Je m’en sers typiquement pour retrouver une chaîne de caractères dans un projet PHP, dans les logs d’un serveur Apache, ou pour vérifier qu’un mot de passe ne traîne pas en clair dans des fichiers de configuration. Dès que la structure dépasse un seul niveau de dossier, grep -r devient le réflexe naturel.

Grep -r : options clés à combiner : -r, -R, --include, --exclude-dir, -n / -i, ripgrep

Syntaxe de base de grep -r

La structure générale tient en une ligne : grep -r « motif » /chemin/dossier. Les guillemets autour du motif ne sont pas décoratifs, ils protègent la chaîne des interprétations du shell, notamment quand elle contient des espaces ou des caractères spéciaux.

Pour chercher depuis le répertoire courant, la syntaxe devient grep -r « motif » ./. C’est la commande que je tape le plus souvent quand je suis déjà positionné dans le dossier d’un projet et que je veux éviter de retaper un chemin absolu.

Cibler un dossier précis

Pour une recherche depuis la racine ou un dossier système, on précise le chemin complet : grep -r « motif » /var/log ou grep -r « motif » /home. Sur un serveur de production, je préfère toujours partir d’un chemin précis plutôt que de la racine /, qui balaierait des dossiers systèmes inutiles et ralentirait la recherche.

Options utiles à combiner avec grep -r

Regardons cela de plus près : grep -r seul reste basique, mais quelques options changent radicalement son utilité au quotidien.

  • -i ignore la casse, utile quand on ne sait pas si le motif est écrit en majuscules ou minuscules dans les fichiers
  • -n affiche le numéro de ligne, indispensable pour retrouver rapidement l’endroit exact dans un fichier de code
  • -l liste uniquement les noms de fichiers concernés, sans afficher les lignes correspondantes. Pratique pour un premier repérage rapide
  • -w ne matche que des mots entiers, ce qui évite de remonter « logger » quand on cherche « log »
  • -v inverse la correspondance et affiche les lignes qui NE contiennent PAS le motif

J’associe souvent -r, -n et -i dans une seule commande : grep -rni « erreur » /var/log. Trois lettres, un gain de temps énorme sur une recherche de logs.

Filtrer la recherche par type de fichier

Sur un gros projet ou un serveur avec des milliers de fichiers, une recherche récursive sans filtre devient lente et noie les résultats utiles sous du bruit. Il est essentiel de comprendre que –include, –exclude et –exclude-dir résolvent ce problème en un seul ajout d’option.

Pour ne cibler que les fichiers PHP d’un projet, la commande devient grep –include=*.php -rnw « motif » ., un exemple documenté par JournalDuNet qui reste ma référence quand j’audite du code source.

Exclure des fichiers ou des dossiers

–exclude=*.log retire les fichiers correspondant à ce motif de la recherche, tandis que –exclude-dir=node_modules ou –exclude-dir=.git évite de fouiller des dossiers volumineux et sans intérêt. Sur un projet Node.js, oublier d’exclure node_modules peut multiplier le temps de recherche par dix.

Cas d’usage concrets de grep -r

Démystifions le sujet avec des scénarios que je croise régulièrement en gestion de serveur ou en revue de code.

Retrouver une erreur ou une IP dans les logs système

Pour repérer toutes les occurrences d’une adresse IP suspecte dans les journaux système, je lance grep -rn « 192.168.1.10 » /var/log. Combiné à -i, cela permet aussi de repérer un message d’erreur sans se soucier de la casse utilisée par l’application.

Chercher une fonction dans un projet de code

Quand je veux savoir où une fonction est appelée dans un projet, grep -rn « nomDeLaFonction » –include=*.js . me donne immédiatement les fichiers et les lignes concernées, sans ouvrir un IDE lourd.

Auditer des fichiers de configuration

Sur un serveur, je vérifie régulièrement qu’aucun mot de passe ne traîne en clair dans les fichiers de config avec grep -rn « password » /etc. Ce genre d’audit rapide évite bien des mauvaises surprises lors d’un contrôle de sécurité.

Combiner grep -r avec d’autres commandes

Pour aller plus loin, grep -r se combine efficacement avec d’autres outils du terminal plutôt que de tout lui demander seul.

Associer find et grep

La commande find permet de cibler des fichiers avant de les grepper, par exemple find . -name « *.conf » -exec grep -l « motif » {} \;. Cette combinaison est utile quand le critère de filtrage dépasse ce que –include peut exprimer.

Utiliser un pipe depuis une autre commande

On peut aussi rediriger la sortie d’une commande vers grep, comme ps aux | grep -i nginx pour vérifier qu’un processus tourne. Ce n’est pas de la recherche récursive à proprement parler, mais le réflexe grep reste le même.

Alternatives modernes : rgrep, ack, ripgrep

La variante rgrep équivaut à grep -r, mais elle est marquée obsolète sur Debian, je préfère donc taper grep -r directement. Pour les développeurs qui cherchent plus de rapidité, ripgrep (commande rg) et ack ignorent nativement les dossiers comme .git ou node_modules et affichent des résultats souvent plus lisibles.

Pour visualiser les limites et les subtilités de grep face à ces alternatives, cette vidéo de LaurieWired détaille des aspects méconnus de son fonctionnement interne.

Erreurs fréquentes et bonnes pratiques

Quelques pièges reviennent souvent chez les utilisateurs qui découvrent grep -r.

Oublier les guillemets

Taper grep -r motif dossier sans guillemets fonctionne parfois par chance, mais casse dès que le motif contient un espace ou un caractère spécial du shell. Je mets systématiquement des guillemets, même pour un mot simple, pour éviter les surprises.

Recherche trop lente sans filtre

Sur un gros volume de fichiers, une recherche sans –include ni –exclude-dir peut prendre plusieurs minutes. L’option -m (max-count) arrête la lecture d’un fichier après un nombre de correspondances donné, ce qui limite aussi le temps de traitement sur de très gros fichiers.

Avant de lancer une recherche récursive sur un dossier volumineux, pensez toujours à exclure .git et node_modules — le gain de temps est immédiat.

Confondre -r et -R

Sur un serveur où des liens symboliques pointent vers d’autres partitions, utiliser -r au lieu de -R peut faire manquer des fichiers pertinents, ou l’inverse peut provoquer une boucle infinie si les liens sont mal configurés. IBM documente d’ailleurs les deux syntaxes grep -R et grep -r -H comme valides sous AIX, avec des comportements légèrement différents selon le système.

ApprocheCas d’usagePoint fort
grep -rRecherche rapide dans un dossierDisponible partout, syntaxe simple
find + grepFiltrage complexe avant rechercheContrôle fin sur les fichiers ciblés
ripgrep (rg)Gros projets de codeVitesse et exclusions automatiques

La commande grep -r reste, pour ma part, le premier réflexe avant de sortir l’artillerie lourde comme ripgrep.

Ces articles pourraient aussi vous intéresser