Comment utiliser grep
pour afficher uniquement les noms de fichier (pas de correspondance en ligne) sous Linux?
J'utilise habituellement quelque chose comme:
find . -iname "*php" -exec grep -H myString {} \;
Comment puis-je obtenir les noms de fichiers (avec les chemins), mais sans les correspondances? Dois-je utiliser xargs
? Je ne voyais pas comment y parvenir sur ma page de manuel grep
.
L'option standard grep -l
(c'est-à-dire un L minuscule) pourrait le faire.
À partir du standard Unix :
-l
(The letter ell.) Write only the names of files containing selected
lines to standard output. Pathnames are written once per file searched.
If the standard input is searched, a pathname of (standard input) will
be written, in the POSIX locale. In other locales, standard input may be
replaced by something more appropriate in those locales.
Vous n'avez pas non plus besoin de -H
dans ce cas.
Depuis la page de manuel grep(1)
:
-l, --files-with-matches Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning will stop on the first match. (-l is specified by POSIX.)
Pour une recherche de fichier simple, vous pouvez utiliser les options -l
et -r
de grep:
grep -rl "mystring"
Toutes les recherches sont effectuées par grep. Bien sûr, si vous devez sélectionner des fichiers sur un autre paramètre, find est la solution correcte:
find . -iname "*.php" -execdir grep -l "mystring" {} +
L'option execdir
construit chaque commande grep pour chaque répertoire et concatène les noms de fichiers en une seule commande (+
).