it-swarm-eu.dev

Come posso usare grep per mostrare da solo i nomi di file su Linux?

Come posso usare grep per mostrare solo nomi di file (nessuna corrispondenza in linea) su Linux?

Di solito uso qualcosa come:

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

Come posso ottenere i nomi dei file (con i percorsi), ma senza le corrispondenze? Devo usare xargs? Non ho visto un modo per farlo nella mia pagina man grep.

877
cwd

L'opzione standard grep -l (che è una L minuscola) potrebbe farlo.

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

Anche in questo caso non è necessario -H.

1339
Random832

Dalla pagina man di 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.)
115

Per una semplice ricerca di file è possibile utilizzare le opzioni -l e -r di grep:

grep -rl "mystring"

Tutta la ricerca è fatta da grep. Naturalmente, se è necessario selezionare i file su qualche altro parametro, trovare è la soluzione corretta:

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

L'opzione execdir crea ogni comando grep per ogni directory e concatena i nomi di file in un solo comando (+).

29
user2350426