5550 votes

La recherche de tous les fichiers contenant une chaîne de texte sous Linux

J'essaie de trouver un moyen pour numériser l'ensemble de mon système Linux pour tous les fichiers contenant une chaîne de caractères de texte. Juste pour préciser, je suis à la recherche de texte dans le fichier, pas dans le nom de fichier.

Quand je cherchais comment faire, je suis tombé sur cette solution à deux reprises:

find / -type f -exec grep -H 'text-to-find-here' {} \;

Toutefois, il ne fonctionne pas. Il semble afficher tous les fichiers dans le système.

Est-ce proche de la bonne façon de le faire? Si non, comment dois-je? Cette capacité à trouver des chaînes de texte dans des fichiers serait extraordinaire utile pour moi, pour certains projets de programmation, je suis en train de faire.

10132voto

rakib Points 6571

Procédez de la manière suivante:

       grep -rnw 'directory' -e "pattern"

-r est récursive, -n est le numéro de ligne et -w stands match le mot en entier. Avec ces, --exclude ou --include paramètre peut être utilisé pour l'efficacité de la recherche. Quelque chose comme ci-dessous:

       grep --include=\*.{c,h} -rnw 'directory' -e "pattern"

Ce sera seulement à la recherche à travers les fichiers qui ont .c ou .h extensions. De même, un exemple d'utilisation d' --exclude:

       grep --exclude=*.o -rnw 'directory' -e "pattern"

Ci-dessus excluent la recherche de tous les fichiers se terminant par .o extension. Tout comme exclure le fichier, il est possible d'exclure/inclure des répertoires via l' --exclude-dir et --include-dir paramètre suivant illustre comment intégrer --exclude-dir:

      grep --exclude-dir={dir1,dir2,*.dst} -rnw 'directory' -e "pattern"

Cela fonctionne pour moi, très bien, pour atteindre presque le même effet comme le vôtre.

1608voto

fedorqui Points 42938

Vous pouvez utiliser grep -ilR:

grep -Ril "text-to-find-here" /
  • i stands pour les majuscules/minuscules (en option dans votre cas).
  • R signifie récursive.
  • l signifie "montrer le nom du fichier, pas le résultat en lui-même`.

354voto

EarlOfEgo Points 1480

Vous pouvez utiliser accusé de réception. C'est comme grep pour le code source. Vous pouvez analyser l'ensemble de votre système de fichiers.

Juste à faire:

ack 'text-to-find-here'

Dans votre répertoire racine.

Vous pouvez également utiliser des expressions régulières, spécifiez le type de fichier, etc.


Mise à JOUR

Je viens de découvrir L'Argent Chercheur, qui est comme accusé de réception, mais de 3 à 5 fois plus rapide que itand même ignore les motifs à partir d'un .gitignore le fichier.

211voto

learner_19 Points 289

Vous pouvez utiliser :

grep -r "string to be searched"  /path/to/dir

La r est l'acronyme récursif et donc va chercher dans le chemin d'accès spécifié et aussi de ses sous-répertoires. Cela vous indiquera le nom de fichier ainsi que l'impression de la ligne dans le fichier où la chaîne s'affiche.

Ou une commande similaire à celui que vous essayez (exemple: ) pour la recherche dans tous les fichiers javascript (*.js):

find . -name '*.js' -exec grep -i 'string to search for' {} \; -print

Cela permettra d'imprimer les lignes dans les fichiers où le texte s'affiche mais ne pas imprimer le nom du fichier.

122voto

user2599593 Points 138

Vous pouvez utiliser ceci:

grep -inr "Text" folder/to/be/searched/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X