How can I use grep to show just filenames on Linux? How can I use grep to show just filenames on Linux? linux linux

How can I use grep to show just filenames on Linux?


The standard option grep -l (that is a lowercase L) could do this.

From the 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.

You also do not need -H in this case.


From the grep(1) man page:

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


For a simple file search, you could use grep's -l and -r options:

grep -rl "mystring"

All the search is done by grep. Of course, if you need to select files on some other parameter, find is the correct solution:

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

The execdir option builds each grep command per each directory, and concatenates filenames into only one command (+).