it-swarm.com.de

Wie kann ich grep verwenden, um unter Linux nur Dateinamen anzuzeigen?

Wie kann ich grep verwenden, um unter Linux nur Dateinamen (keine Inline-Übereinstimmungen) anzuzeigen?

Ich benutze normalerweise etwas wie:

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

Wie bekomme ich nur die Dateinamen (mit Pfaden), aber ohne die Übereinstimmungen? Muss ich xargs verwenden? Ich habe auf meiner Manpage grep keine Möglichkeit gefunden, dies zu tun.

931
cwd

Die Standardoption grep -l (das ist ein Kleinbuchstabe L) könnte dies tun.

Aus dem nix-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.

Sie brauchen in diesem Fall auch keinen -H.

1416
Random832

Auf der Manpage 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.)
124

Für eine einfache Dateisuche können Sie die Optionen -l und -r von grep verwenden:

grep -rl "mystring"

Die gesamte Suche wird von grep durchgeführt. Wenn Sie Dateien für einen anderen Parameter auswählen müssen, ist find natürlich die richtige Lösung:

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

Die Option execdir erstellt jeden grep-Befehl für jedes Verzeichnis und verknüpft Dateinamen zu nur einem Befehl (+).

28
user2350426