Signaler

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

Posez votre question 2009 - Dernière réponse le 7 mars 2017 à 08:02 par Gavroche
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 ?
Utile
+20
plus moins
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é ?  
Utile
+6
plus moins
-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
Utile
+3
plus moins
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 43485Messages postés jeudi 28 août 2003Date d'inscription ModérateurStatut 7 novembre 2010 Dernière intervention - 31 mai 2010 à 18:55
find /home -name "*" -exec grep -Hn 'expression?param='  {} \;
esperlu 1Messages 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 43485Messages postés jeudi 28 août 2003Date d'inscription Modé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 1Messages 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 =)
Utile
+1
plus moins
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
Utile
+0
plus moins
Salut,

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

Utile
+0
plus moins
find /home/ | grep premier
lami20j 21514Messages postés jeudi 4 novembre 2004Date d'inscription Modé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 ;-)
Utile
+0
plus moins
ça ne marche, mais que sur le repertoire "home", pas récursivement
Utile
+0
plus moins
Salut,

grep -l "premier" /home/*

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

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !