J'essaie de trouver un moyen d'analyser l'ensemble de mon système Linux pour tous les fichiers contenant une chaîne de texte spécifique. Juste pour clarifier, je cherche du texte dans le fichier, pas dans le nom du fichier.
Quand je cherchais comment faire cela, je suis tombé sur cette solution deux fois:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Mais ça ne marche pas. Il semble afficher tous les fichiers du système.
Est-ce proche de la bonne façon de procéder? Sinon, comment dois-je? Cette capacité à trouver des chaînes de texte dans des fichiers serait extrêmement utile pour certains projets de programmation que je fais.
-H
par -l
(et peut-être grep
par fgrep
). Pour exclure des fichiers avec certains modèles de noms, vous utiliseriez find
d'une manière plus avancée. Il vaut la peine d'apprendre à utiliser find
, cependant. Justement man find
.
find … -exec <cmd> +
est plus facile à taper et plus rapide que find … -exec <cmd> \;
. Il ne fonctionne que s'il <cmd>
accepte un nombre quelconque d'arguments de nom de fichier. Le gain de temps d'exécution est particulièrement important s'il <cmd>
est lent à démarrer comme les scripts Python ou Ruby.
grep "pattern" path/*.txt
.
comme un caractère générique à un seul caractère, entre autres. Mon conseil est de toujours utiliser fgrep ou egrep.