Question Comment puis-je utiliser grep pour montrer juste des noms de fichiers (pas de correspondance en ligne) sur Linux?


Comment puis-je utiliser grep afficher uniquement les noms de fichier (pas de correspondance en ligne) sur Linux?

J'utilise habituellement quelque chose comme:

find . -iname "*php" -exec grep -H myString {} \;

Comment puis-je simplement obtenir les noms de fichiers (avec des chemins), mais sans les correspondances? Dois-je utiliser xargs? Je n'ai pas vu un moyen de le faire sur mon grep page de manuel.


748
2017-07-09 22:24


origine


Réponses:


L'option standard grep -l (c'est un L minuscule) pourrait le faire.

Du Unix standard:

-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 -H dans ce cas.


1128
2017-07-09 22:26



Du grep(1) page de manuel:

  -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.)

101
2017-07-09 22:26



Pour une simple recherche de fichier, vous pouvez utiliser grep -l et -r options:

grep -rl "mystring"

Toute la recherche est effectuée par grep. Bien sûr, si vous avez besoin de sélectionner des fichiers sur un autre paramètre, find est la bonne solution:

find . -iname "*.php" -execdir grep -l "mystring" {} +

le execdir option crée chaque commande grep pour chaque répertoire et concatène les noms de fichiers en une seule commande (+).


23
2017-09-08 17:23