So finden Sie Dateien mit einem bestimmten Text im Terminal

168

Ich möchte alle Dateien finden, die eine bestimmte Textfolge enthalten. Wie würden Sie das im Terminal machen?

Svish
quelle
Wenn Sie ein schnelles Ergebnis erzielen möchten, verwenden Sie jedoch Spotlight. Auch, wenn Sie Dateien suchen möchten, in denen Text nicht unbedingt direkt in der Datei gespeichert ist, z. B. PDF oder ODF.
Joey
Guter Rat, aber in meinem Fall bin ich nicht sicher, ob die Dateien indiziert sind, da sie sich auf Netzwerktreibern befinden. Und es handelt sich auch um XML-Dateien, die zu einem bestimmten Programm gehören.
Svish
Werfen Sie einen Blick auf unix.stackexchange.com/a/37932/213832 Diese Lösung funktioniert gut
boyd4715

Antworten:

280
grep -r 'text goes here' path_goes_here
Ignacio Vazquez-Abrams
quelle
1
Ich würde vorschlagen man grep, all die wunderbaren Möglichkeiten von grep zu entdecken
Ludovic Kuty
Dies listet jede Datei auf, die im Pfad vorhanden ist, und fügt hinzu: No such file or directory Ich versuche, nur die Liste der Textvorkommen abzurufen. Wie können wir diese Liste bekommen?
CP3O
7
Verstanden: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O
Dies gibt jedoch den Inhalt der übereinstimmenden Dateien zurück, nicht die Dateidetails (Name, Pfad). @ CP3Os Vorschlag funktioniert.
Geotheorie
28

Verwenden Sie Scheinwerfer

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

vergiss nicht zu schauen auf:

man mdfind
user46046
quelle
2
Funktioniert dies für Dateien, die von Spotlight nicht indiziert werden (z. B. Dateien in versteckten Ordnern, Systemkonfigurationsdateien usw.)?
Peter Berg
Grep scheint keine .xlsx-Dateien zu analysieren, aber das hat gut funktioniert. Ein weiteres einfaches Beispiel: mdfind -onlyin. "Suchtext"
FvD
11
  1. Durch Ack

brew install ack ack "text goes here"

  1. Durch finden

find . |grep "text goes here"

  1. Durch grep

grep -RnslI "text goes here"

Anant Gupta
quelle
4

Sie können je nach Geschmack und Bedarf eine der folgenden Optionen auswählen. Angenommen, Sie müssen rekursiv im aktuellen Verzeichnis nach Dateien suchen, die Text - "async" enthalten, dann haben Sie folgende Möglichkeiten:

Grep benutzen Bildbeschreibung hier eingeben

Mit ack Bildbeschreibung hier eingeben

Karthiks
quelle
2

Ignacios Antwort ist großartig und hat mir geholfen, die Dateien zu finden, die bestimmten Text enthalten. Das einzige Problem, dem ich gegenüberstand, war, dass beim Ausführen dieses Befehls alle Dateien aufgelistet wurden, einschließlich einer, bei der das Muster nicht angezeigt wurde.

No such file or directory Dies sehe ich neben Dateien, die das Muster nicht enthalten.

Wenn Sie stattdessen -sden Befehl hinzufügen , wie in grep -lr "text pattern" ./ -s:; grep -lr "text pattern" [PATH DIRECTORY] -swird nur angezeigt, welche Dateien das Muster enthalten.

Ebenso wenn grep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -sBefehl wird verwendet, um die Datei plus die Zeilennummer und das Auftreten des Musters zu drucken.

Bitte korrigieren Sie mich, wenn mein Verständnis falsch ist.

Referenz: Wie kann ich feststellen, dass grep den Fehler 'Keine solche Datei oder Verzeichnis' ausgibt?

CP3O
quelle
Eine weitere Möglichkeit zur Vermeidung dieser lästigen keine solche Datei Fehler, ist mit dem Rohr stderr auf null. grep ... 2>/dev/null. Diese Lösung funktioniert für die meisten Programme, da sie Fehlermeldungen im stderr-Stream und nicht im stdout-Stream melden. Ich habe diese Lösung schon oft mit verwendet find, da für viele Dateien die Erlaubnis verweigert wird .
Jpaugh
(1) Wenn Sie No such file or directoryNachrichten für vorhandene Dateien erhalten, tun Sie entweder etwas falsch oder Ihr System ist kaputt. (2) Was hat [PATH OF PARENT]mit irgendetwas zu tun?
G-Man
@ G-Man Ich habe die Antwort bearbeitet, um [PATH OF DIRECTORY]nur zu zeigen, falls jemand Unbekanntes wissen wollte, warum ich gesetzt hatte./
CP3O
@ G-Man Ich benutze einen Mac nicht Ubuntu, bin mir nicht sicher, wie mein System kaputt gehen würde, ich habe noch kaum etwas daran gemacht.
CP3O