J'essaie de trouver un moyen d'analyser tout mon système Linux pour trouver tous les fichiers contenant une chaîne de texte spécifique. Pour clarifier, je cherche du texte dans le fichier, pas dans le nom du fichier.
En cherchant comment faire, je suis tombé deux fois sur cette solution :
find / -type f -exec grep -H 'text-to-find-here' {} \;
Cependant, cela ne fonctionne pas. Il semble afficher tous les fichiers du système.
Est-ce que c'est proche de la bonne façon de faire ? Si non, comment dois-je faire ? Cette capacité à trouver des chaînes de texte dans des fichiers serait extraordinairement utile pour certains projets de programmation que je réalise.
34 votes
Rappelez-vous que grep interprétera toute
.
comme un caractère de remplacement à un seul caractère, entre autres. Mon conseil est de toujours utiliser soit fgrep soit egrep.12 votes
De toute façon, vous y étiez presque ! Remplacez simplement
-H
con-l
(et peut-êtregrep
confgrep
). Pour exclure les fichiers avec certains modèles de noms, vous pouvez utiliserfind
de manière plus avancée. Il vaut la peine d'apprendre à utiliser les outils suivantsfind
mais Justeman find
.8 votes
find … -exec <cmd> +
est plus facile à taper et plus rapide quefind … -exec <cmd> \;
. Il ne fonctionne que si<cmd>
accepte un nombre quelconque d'arguments pour le nom du fichier. L'économie en temps d'exécution est particulièrement importante si<cmd>
est lent à démarrer comme les scripts de Python ou de Ruby.0 votes
Pour effectuer une recherche non récursive dans un chemin donné, la commande est `grep --include=*.txt -snw "pattern" thepath/*.
0 votes
@StéphaneLaurent Je pense que vous compliquez trop les choses. Dites simplement
grep "pattern" path/*.txt
0 votes
Cette question devrait être posée à la communauté Unix-Linux.
0 votes
Cette solution consiste à trouver un modèle (correspondance regex), et non un texte spécifique, qui pourrait contenir des symboles nécessitant un échappement.
0 votes
Cela répond-il à votre question ? Comment puis-je utiliser grep pour trouver un mot dans un dossier ?
0 votes
Grep -nri "stringstrings" /path/
0 votes
Celle de @kenorb est, de loin, la meilleure réponse ! stackoverflow.com/a/30138655/274502 Dommage que ça n'ait pas été plus aimé.