Wie kann ich mit grep nur Dateinamen unter Linux anzeigen?


1068

Wie kann ich unter grepLinux nur Dateinamen (keine Inline-Übereinstimmungen) anzeigen?

Ich benutze normalerweise so etwas wie:

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

Wie kann ich nur die Dateinamen (mit Pfaden) erhalten, aber ohne die Übereinstimmungen? Muss ich verwenden xargs? Ich habe auf meiner grepManpage keinen Weg gesehen, dies zu tun .


3
Sie wollen die Dateinamen, die mindestens eine Übereinstimmung haben?
— Leonbloy

4
Gute Frage. Ich habe damit begonnen, eine Liste der von grep in Vim zurückgegebenen Dateien zu öffnen. vim $(grep -rl Something app/)
— David Tuite

1
Sie können Dateien nicht mit dem Befehl grep auflisten. Er wird im Wesentlichen verwendet, um den gewünschten Text aus einer Datei oder einer Liste abzurufen. Zum Beispiel ps aux | grep 'apt-get' oder grep 'text-to-find' / path / to / file /
— iamjayp

Antworten:


1625

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

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

Sie brauchen auch -Hin diesem Fall nicht.


37
Die Dokumentation dieser Option ist (wie so oft in den meisten Man-Dateien) so unklar! Pfff… Erstaunlich, wie der Mensch ein Schmerz im Arsch sein kann.
— MonsieurDart

1
-H zeigt auch die Spiele selbst. Die Frage war nur für Dateinamen.
— Hauke

@Hauke ​​Und meine Antwort war -l. Ich habe -H nur erwähnt, weil der Befehl des Benutzers in der Frage -H enthielt und es redundant ist, wenn -l angegeben wird.
— Random832

2
Schön, ich persönlich benutze dies gerne mit anderen Flags, grep -nrl "some text" .wenn ich rekursiv nach Text in einer Reihe von Unterordnern
— suche

142

Von der grep(1)Manpage:

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

4
Ein Stopp beim ersten Spiel ist notwendig und Natur.
— Thomson

7
Die Dokumentation macht es etwas unklar. "Der Scanvorgang wird bei der ersten Übereinstimmung beendet" - zeigt an, dass alle Dateinamen gedruckt werden, die Suche nach dem übereinstimmenden Wort jedoch beim ersten Auftreten beendet wird.
— TheMonkWhoSoldHisCode

2
@VishalP: Da es uns egal ist, wo sich die Vorkommen befinden, nur dass sie existieren, macht es keinen Sinn, jede Datei über das erste Vorkommen hinaus zu durchsuchen.
— Ignacio Vazquez-Abrams

17
@ IgnacioVazquez-Abrams Genau. Beim ersten Eindruck des Dokuments haben Sie das Gefühl, dass nur der Dateiname der ersten Datei gedruckt wird. Sie brauchen wirklich ein paar Lesungen, um es zu verstehen.
— TheMonkWhoSoldHisCode

5
"Das Scannen der aktuellen Datei wird beim ersten Spiel beendet." wäre viel klarer.
— Sorrymissjackson

37

Für eine einfache Dateisuche können Sie grep's -lund -rOptionen verwenden:

grep -rl "mystring"

Die gesamte Suche erfolgt über grep. 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 execdirOption erstellt jeden grep-Befehl pro Verzeichnis und verknüpft Dateinamen zu nur einem Befehl ( +).


0

Ihre Frage Wie kann ich nur die Dateinamen (mit Pfaden) erhalten?

Ihr Syntaxbeispiel finden. -iname "* php" -exec grep -H myString {} \;

Mein Befehlsvorschlag

sudo find /home -name *.php

Die Ausgabe dieses Befehls unter meinem Linux-Betriebssystem:

compose-sample-3 / html / mail / contact_me.php

Viel Spaß, da Sie den Dateinamen mit Pfad benötigen!


In der Frage wird speziell gefragt, wie sie die Dateinamen mit grep erhalten .
— Snakecharmerb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.