Fichiers contenant une chaine de caractère

[Résolu/Fermé]
Signaler
-
 mathieu -
bonjour,

quelle commande me permettrait de savoir quels fichiers ds un dossier que l'on appellera D1 contiennent une chaîne de caractères string1?
je pense qu'il faut faire appel aux commandes find et grep.
à mon avis, il faudrait les utiliser ds une même ligne de commande.
jai essayé find [chemin du dossier D1] -name |grep string 1 -print...
ça ne marche pas...

merci de m'éclairer!

mathieu

7 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 878
Salut,

Alors tu peux essayer avec la commande "find" comme ceci :
find /chemin/rep -name "*" -exec grep -Hn "string" {} \;
Alors en gros on recherche dans le répertoire "/chemin/rep", en passant en revue tous les fichiers du répertoire et des sous-répertoires (tu peux cibler d'avantage en réduisant la recherche à quelques répertoires ou aux extensions de fichiers), puis pour chaque fichier on recherche la chaîne (string) en affichant le chemin (-H) et le numéro de ligne (-n) si la chaîne est trouvée.

Tu peux aussi essayer comme ça :
find /chemin/rep -name '*' |xargs grep -l "string" 
;-))
66
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
30042
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
2 septembre 2021
7 164
grep -nri motif filtrefichier

n -> dans le fichier
r -> recherche récursive (ie dans les sous répertoires)
i -> insensible à la casse

Exemple :
$ grep -nri "include" *.cpp
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 878
à koi correspondent xargs et Hn?
Pour "xargs" => man xargs
pour "-Hn" => lire mon post en entier, c'est expliqué ;-))

Pour "{}", ça représente toutes les occurences trouvées correspondants au motif "*" (là dans ce cas, tous les fichiers du répertoire et des sous-répertoires).

Le ";" c'est pour signifier la fin de la commande, et le "\" devant c'est pour "échapper" le caractère ";".
merci!
si je comprends bien, il faut donc que je me positionne au niveau du dossier qui m'intéresse: ici D1...
car je ne souhaite pas kil me recherche la chaine ds tous les réperetoires mais juste ds le dossier D1 et je ne sais comment lui spécifier...
Messages postés
30042
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
2 septembre 2021
7 164
Pour le grep que je t'ai donné la recherche se fait à partir du dossier où tu te trouves. L'option -r permet de fouiller en plus dans ses sous-dossiers. Bref évite de faire ce genre de choses depuis / sinon tu risque d'avoir le temps long ;o)
merci!

à koi correspondent xargs et Hn?
pkoi rajouter "{} \;" ?
ok merci!