Linux : find & grep [Résolu/Fermé]

2009 - 1 janv. 2009 à 13:29 - Dernière réponse :  Gavroche
- 7 mars 2017 à 08:02
Bonjour,

il faut a la question suivante en utilisant grep et find :
affichier les noms de fichiers qui contient le mot "premier" a partir de votre dossier "home"

j'aii essayé avec : find ~ -name * -print -exec grep "premier"

mais j'arrive que a afficher les lignes ... comment faire pour afficher le nom de fichier ?
Afficher la suite 

15 réponses

bob031 8215 Messages postés samedi 7 août 2004Date d'inscription 1 septembre 2014 Dernière intervention - 1 juin 2010 à 21:00
+21
Utile
1
Bonjour,

celle-ci devrait le faire aussi :

find . -type f -name "*.php" -exec grep -il 'pattern' {} \;



ou bien celle-ci :

find . -name "*.php" -print0 | xargs -0 egrep pattern


^ ^
Cette réponse vous a-t-elle aidé ?  
Tetsumaki 1 Messages postés mardi 23 novembre 2010Date d'inscription 23 novembre 2010 Dernière intervention - Modifié par Tetsumaki le 23/11/2010 à 05:18
+6
Utile
-n, --line-number print line number with output lines
-R, -r, --recursive equivalent to --directories=recurse

Un petit exemple :

Je recherche le mot alonso dans le répertoire /home/tetsumaki/allons-y

alonso ce trouve sur la ligne 2 du fichier /home/tetsumaki/allons-y/test.h
sur la ligne 5 du fichier /home/tetsumaki/allons-y/test/test2.h

Recherche dans le répertoire :

[tetsumaki@tetsu-arch ~]$ grep -rn "alonso" "/home/tetsumaki/allons-y/" 
/home/tetsumaki/allons-y/test.h:2:alonso 
/home/tetsumaki/allons-y/test/test2.h:5:alonso


Ou si je me trouve dans le répertoire dans lequel je veux rechercher :

[tetsumaki@tetsu-arch allons-y]$ cd ~/allons-y/ 
[tetsumaki@tetsu-arch allons-y]$ grep -rn "alonso" . 
./test.h:2:alonso 
./test/test2.h:5:alonso


Si je veux rechercher que sur les fichiers ayant l'extension ".h" :

[tetsumaki@tetsu-arch allons-y]$ grep -rn --include="*.h" "alonso" "/home/tetsumaki/allons-y/" 
/home/tetsumaki/allons-y/test.h:2:alonso 
/home/tetsumaki/allons-y/test/test2.h:5:alonso
+3
Utile
4
Bonjour, je cherche à rechercher une chaine précise dans des fichiers php, sur mon serveur
J'ai tenté de nombreuses syntaxe, aucune ne donnant des résultats ..

find /home | grep -R -l 'expression?param='
find /home -name *.php -print -exec grep -H "expression?param=" {}\;

celle ci ne fonctionne que dans le repertoire local courant
grep -s -R -H 'expression?param=' *.php
jipicy 43485 Messages postés jeudi 28 août 2003Date d'inscriptionModérateurStatut 7 novembre 2010 Dernière intervention - 31 mai 2010 à 18:55
find /home -name "*" -exec grep -Hn 'expression?param='  {} \;
esperlu 1 Messages postés lundi 31 mai 2010Date d'inscription 31 mai 2010 Dernière intervention - 31 mai 2010 à 19:26
Bonsoir,

Pourquoi pas simplement:
grep -rn 'expression?param=' /home/*.php

Utilise le développement de fichier (glob) natif de grep qui parcourra le répertoire /home/ récursivement (-r). L'option -H est superflue (valeur par défaut pour la recherche sur plusieurs fichiers).
jipicy 43485 Messages postés jeudi 28 août 2003Date d'inscriptionModérateurStatut 7 novembre 2010 Dernière intervention - 1 juin 2010 à 10:53
/home/*.php
Là ça ne fait que parser les fichiers *.php du répertoire (/home où je doute qu'il y en ait ;-) ) mais ça ne descend pas dans l'arborescence ;-(

grep -rn --include='*.php' 'expression?param=' /home

Devrait le faire ;-))
jeffbc 1 Messages postés mardi 1 juin 2010Date d'inscription 1 juin 2010 Dernière intervention - 1 juin 2010 à 12:07
Merci cette dernière fonctionne à merveille =)
+1
Utile
find /chemin/vers/repertoire -type f -exec grep -il "lemot" {} \;

cette commande affiche la liste des fichiers qui contiennent le mot "lemot" dans le repertoire "repertoire" et aussi dans ses sous-repertoires
lami20j 21513 Messages postés jeudi 4 novembre 2004Date d'inscriptionModérateurStatut 8 octobre 2012 Dernière intervention - 1 janv. 2009 à 14:26
0
Utile
Salut,

man grep
       -H, --with-filename
              Afficher le nom du fichier pour chaque concordance.

0x0syscall 85 Messages postés lundi 28 avril 2008Date d'inscription 30 juin 2009 Dernière intervention - 1 janv. 2009 à 16:26
0
Utile
1
find /home/ | grep premier
lami20j 21513 Messages postés jeudi 4 novembre 2004Date d'inscriptionModérateurStatut 8 octobre 2012 Dernière intervention - 1 janv. 2009 à 16:31
Salut,

Ta commande cherche tous les répertoires/fichiers dans /home qui contient dans leur nom le mot premier

Il demande
affichier les noms de fichiers qui contient le mot "premier" a partir de votre dossier "home"
Qui pour moi veut dire de trouver tous les fichiers qui ont dans leur contenu le mot "premier"

Si ta commande lui convient alors il a mal posé la question ;-)
0
Utile
ça ne marche, mais que sur le repertoire "home", pas récursivement
choco90 469 Messages postés samedi 21 mars 2009Date d'inscription 13 juillet 2016 Dernière intervention - 1 juin 2010 à 19:46
0
Utile
Salut,

grep -l "premier" /home/*

en utilisant l'option -l
-1
Utile
en fait l'option -l ( L miniscule) fait ça:
grep -R -l <mot_recherché> <répertoire>
l'option -R permet de rechercher récursivement