Je recherche souvent le code source dans des structures de dossiers complexes et je trouve utile d'utiliser:
cd /your/folder/
grep -rHino "your string"
Avec ces paramètres, sans utiliser find , j'obtiens le chemin complet du fichier et le numéro de ligne qui contient la chaîne spécifiée .
Il est également facile de se rappeler parce qu'il BASH es par votre recherche comme un RHINO :)
Je vais montrer comment cela fonctionne avec un exemple rapide.
Affiche le contenu d'un fichier en utilisant cat:
jeeves ~ # cat fw.stop
#!/bin/sh
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Et cherchons récursivement tous les fichiers contenant la chaîne "iptables -P":
jeeves ~ # grep -rinHo "iptables -P"
fw.stop:9:iptables -P
fw.stop:10:iptables -P
fw.stop:11:iptables -P
Comme vous pouvez le voir dans le résultat, nous avons filename: hit row: chaîne recherchée
Voici une description plus détaillée des paramètres utilisés:
-r Pour chaque opérande de répertoire, lisez et traitez tous les fichiers de ce répertoire de manière récursive. Suivez les liens symboliques sur la ligne de commande, mais ignorez les liens symboliques rencontrés de manière récursive. Notez que si aucun opérande de fichier n’est donné, grep cherche dans le répertoire de travail. C'est la même chose que l'option '--directories = recurse'.
-i Affiche le nom du fichier pour chaque correspondance. C'est la valeur par défaut lorsqu'il y a plus d'un fichier à rechercher.
-n Préfixe chaque ligne de sortie avec le numéro de ligne basé sur 1 dans son fichier d'entrée. (-n est spécifié par POSIX.)
-H Affiche le nom du fichier pour chaque correspondance. C'est la valeur par défaut lorsqu'il y a plus d'un fichier à rechercher.
-o Imprimez uniquement les parties correspondantes (non vides) des lignes correspondantes, chacune de ces parties se trouvant sur une ligne de sortie distincte. Les lignes de sortie utilisent les mêmes délimiteurs comme entrée et les délimiteurs sont des octets nuls si -z (--null-data) est également utilisé (voir Autres options).
find . -type f -fprint /dev/stderr -exec cat {} \; | grep some string