Linux : Chercher une chaîne de caractères dans un dossier
22 sept. 2009
Par frinux - Linux - Lien permanent
Etant donné que je ne trouve jamais cette info quand j'en ai besoin, je la poste sur mon blog...
Voici un des moyens permettant de chercher une chaîne de caractère "1234" dans tous les fichiers d'un dossier en ligne de commande :
- Chercher dans tous les fichiers :
find /path/to/dir/ | xargs grep "1234"
- Chercher dans tous les fichiers dont l'extension est .html :
find /path/to/dir/ -iname "*.html" | xargs grep "1234"
Pour info, xargs récupère la sortie de la commande avant le pipe ( | ) et exécute la commande suivante appliquée à cette sortie (si c'est pas clair, allez voir ici )
Source : petitchevalroux.net
Commentaires
En fait je suis pas d'accord avec ce que tu fais...
Pour le premier cas:
grep -nr "12345" /repertoire/de/recherche
Pas de find... inutile.
Dans le second cas, xargs est inutile avec find. Ce dernier a une option -exec:
find /repertoire -iname "*.html" -exec grep "12345" {} \;
Comme le spécifie le man, "{}" sera replacé par le nom du fichier trouvé (avec le chemin si il y a lieu) et on fini la commande d'exec par un point virgule echapé (\;)
Bref pas de pipe quand c'est inutile.
metal3d@metal3d :
En effet, pour le premier cas il est inutile d'utiliser find. Mais l'intérêt de ce que je montre est d'utiliser les arguments de find, qui se révèlent puissants (on préfère en général chercher selon un type de fichier ou une taille donnée) :
- name pour la recherche de noms de fichiers (iname pour insensible à la casse)
- type
- size
- etc...
Et pour continuer, effectivement on peut aussi utiliser le -exec de find pour rediriger la sortie vers grep. Cependant, cette solution est moins performante. En fait, avec un grep, cela créé un processus pour chaque fichier.
(source source)
Le pipe est donc utile ici ;-)
frinuxmoi j'avoue que pour le 1er cas j'utilise :
grep -rl 'expression' rep_recherche
vive le pastis
yotarSalut,
Merci pour ces commandes qui m'ont vraiment aidé.
Y a-t-il une commande qui recherche une chaine dans un dossier et la remplace par une autre ?
Merci
Stan@Stan : pour ce genre de traitement il faut voir du côté de sed je pense (http://fr.wikipedia.org/wiki/Stream_Editor). Je ne suis pas un expert la dessus par contre...
frinux