Voulez-vous trouver tous les fichiers contenant un mot ou une chaîne de texte particulière sur l'ensemble de votre système Linux ou un répertoire donné. Cet article vous guidera sur la façon de procéder, vous apprendrez à parcourir de manière récursive les répertoires pour trouver et répertorier tous les fichiers contenant une chaîne de texte donnée.
Un moyen simple de résoudre ce problème consiste à utiliser l'outil de recherche de modèles grep, un utilitaire de ligne de commande puissant, efficace, fiable et le plus populaire pour rechercher des modèles et des mots à partir de fichiers ou de répertoires sur des systèmes de type Unix.
Lire aussi :11 commandes Linux avancées "Grep" sur les classes de caractères et les expressions entre parenthèses
La commande ci-dessous listera tous les fichiers contenant une ligne avec le texte "check_root ”, en recherchant récursivement et agressivement le ~/bin
répertoire.
$ grep -Rw ~/bin/ -e 'check_root'
Où le -R
l'option indique grep pour lire tous les fichiers sous chaque répertoire, de manière récursive, en suivant les liens symboliques uniquement s'ils se trouvent sur la ligne de commande et l'option -w lui ordonne de sélectionner uniquement les lignes contenant des correspondances qui forment des mots entiers, et -e
est utilisé pour spécifier la chaîne (motif) à rechercher.
Vous devez utiliser la commande sudo lors de la recherche de certains répertoires ou fichiers nécessitant des autorisations root (sauf si vous gérez votre système avec le compte root).
$ sudo grep -Rw / -e 'check_root'
Pour ignorer les distinctions de casse, utilisez le -i
comme indiqué :
$ grep -Riw ~/bin/ -e 'check_root'
Si vous voulez connaître la ligne exacte où se trouve la chaîne de texte, incluez le -n
option.
$ grep -Rinw ~/bin/ -e 'check_root'
En supposant qu'il existe plusieurs types de fichiers dans un répertoire dans lequel vous souhaitez effectuer une recherche, vous pouvez également spécifier le type de fichiers à rechercher par exemple, par leur extension en utilisant le --include
option.
Cet exemple indique à grep de ne parcourir que tous les .sh
fichiers.
$ grep -Rnw --include=\*.sh ~/bin/ -e 'check_root'
De plus, il est possible de rechercher plusieurs motifs à l'aide de la commande suivante.
$ grep -Rinw ~/bin/ -e 'check_root' -e 'netstat'
C'est ça! Si vous connaissez une autre astuce de ligne de commande pour trouver une chaîne ou un mot dans des fichiers, partagez-la avec nous ou posez des questions à ce sujet, utilisez le formulaire de commentaire ci-dessous.