Ich versuche, eine Möglichkeit zu finden, mein gesamtes Linux-System nach allen Dateien zu durchsuchen, die eine bestimmte Textzeichenfolge enthalten. Zur Verdeutlichung suche ich nach Text in der Datei, nicht nach dem Dateinamen.
Als ich nachgeschaut habe, wie das geht, bin ich zweimal auf diese Lösung gestoßen:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Es funktioniert jedoch nicht. Es scheint, als würde jede einzelne Datei im System angezeigt.
Ist dies nah an der richtigen Vorgehensweise? Wenn nicht, wie soll ich Diese Fähigkeit, Textzeichenfolgen in Dateien zu finden, wäre für einige meiner Programmierprojekte außerordentlich nützlich.
Mach Folgendes:
grep -rnw '/path/to/somewhere/' -e 'pattern'
-r
oder -R
ist rekursiv,-n
ist die Zeilennummer und-w
steht für Übereinstimmung mit dem gesamten Wort.-l
(Kleinbuchstabe L) kann hinzugefügt werden, um nur den Dateinamen der übereinstimmenden Dateien anzugeben.Zusammen mit diesen können --exclude
, --include
, --exclude-dir
Flags für eine effiziente Suche verwendet werden:
Dies durchsucht nur die Dateien mit den Endungen .c oder .h:
grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
Dies schließt das Durchsuchen aller Dateien mit der Erweiterung .o aus:
grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
Für Verzeichnisse ist es möglich, ein bestimmtes Verzeichnis (oder bestimmte Verzeichnisse) über den Parameter --exclude-dir
auszuschließen. Dies schließt beispielsweise die Verzeichnisse dir1 /, dir2/und alle mit * .dst/übereinstimmenden Verzeichnisse aus:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
Dies funktioniert sehr gut für mich, um fast den gleichen Zweck wie Ihren zu erreichen.
Weitere Optionen finden Sie in man grep
.
Sie können grep -ilR
verwenden:
grep -Ril "text-to-find-here" /
i
steht für Groß- und Kleinschreibung ignorieren (optional in Ihrem Fall).R
steht für rekursiv.l
steht für "Zeige den Dateinamen, nicht das Ergebnis selbst"./
steht für den Start im Stammverzeichnis Ihres Computers.Sie können ack verwenden. Es ist wie grep für den Quellcode. Sie können damit Ihr gesamtes Dateisystem scannen.
Mach einfach:
ack 'text-to-find-here'
In Ihrem Stammverzeichnis.
Sie können auch reguläre Ausdrücke verwenden, den Dateityp angeben usw.
UPDATE
Ich habe gerade The Silver Searcher entdeckt, das ist wie ack, aber 3-5x schneller als es und ignoriert sogar Muster aus einer .gitignore
-Datei.
Sie können verwenden:
grep -r "string to be searched" /path/to/dir
Das r
steht für rekursiv und durchsucht daher den angegebenen Pfad sowie dessen Unterverzeichnisse. Dies teilt Ihnen den Dateinamen mit und gibt die Zeile in der Datei aus, in der die Zeichenfolge angezeigt wird.
Oder einen Befehl ähnlich dem, den Sie versuchen (Beispiel:), um in allen Javascript-Dateien (* .js) zu suchen:
find . -name '*.js' -exec grep -i 'string to search for' {} \; -print
Dadurch werden die Zeilen in den Dateien gedruckt, in denen der Text angezeigt wird, der Dateiname wird jedoch nicht gedruckt.
Zusätzlich zu diesem Befehl können wir auch Folgendes schreiben: grep -rn "Zu durchsuchender String"/path/to/directory/or/file - r: rekursiv Suche n: Zeilennummer wird für Übereinstimmungen angezeigt
Sie können dies verwenden:
grep -inr "Text" folder/to/be/searched/
Zunächst glaube ich, dass Sie -H
anstelle von -l
verwendet haben. Sie können auch versuchen, den Text in Anführungszeichen gefolgt von {} \
einzufügen.
find / -type f -exec grep -l "text-to-find-here" {} \;
Angenommen, Sie suchen in Ihrem Verzeichnis nach Dateien, die bestimmten Text "Apache License" enthalten. Es werden Ergebnisse angezeigt, die der folgenden ähneln (die Ausgabe hängt von Ihrem Verzeichnisinhalt ab).
bash-4.1$ find . -type f -exec grep -l "Apache License" {} \;
./net/Java/jvnet-parent/5/jvnet-parent-5.pom
./commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.pom
./io/swagger/swagger-project/1.5.10/swagger-project-1.5.10.pom
./io/netty/netty-transport/4.1.7.Final/netty-transport-4.1.7.Final.pom
./commons-codec/commons-codec/1.9/commons-codec-1.9.pom
./commons-io/commons-io/2.4/commons-io-2.4.pom
bash-4.1$
Auch wenn Sie die Groß-/Kleinschreibung nicht wie "text" vs "TEXT" verwenden, können Sie den Schalter -i
verwenden, um die Groß-/Kleinschreibung zu ignorieren. Sie können weitere Details lesen hier .
Hoffe das hilft dir.
grep
( GNU oder BSD )Sie können das Tool grep
verwenden, um den aktuellen Ordner rekursiv zu durchsuchen. Beispiel:
grep -r "class foo" .
Hinweis: -r
- Durchsucht rekursiv Unterverzeichnisse.
Sie können auch die Globbing-Syntax verwenden, um in bestimmten Dateien zu suchen, z.
grep "class foo" **/*.c
Hinweis: Mit der Globbing-Option (**
) werden alle Dateien mit einer bestimmten Erweiterung oder einem bestimmten Muster rekursiv gescannt. Um diese Syntax zu aktivieren, führen Sie Folgendes aus: shopt -s globstar
. Sie können auch **/*.*
für alle Dateien (mit Ausnahme von ausgeblendeten Dateien) verwenden und ohne Erweiterung) oder ein anderes Muster.
Wenn Sie den Fehler haben, dass Ihr Argument zu lang ist, können Sie Ihre Suche eingrenzen oder die Syntax find
verwenden, z. B .:
find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'
Alternativ können Sie ripgrep
verwenden.
ripgrep
Wenn Sie an größeren Projekten oder großen Dateien arbeiten, sollten Sie stattdessen ripgrep
verwenden, beispielsweise:
rg "class foo" .
Überprüfen Sie die Dokumente, Installationsschritte oder den Quellcode auf der GitHub-Projektseite .
Es ist viel schneller als jedes andere Tool wie GNU / BSDgrep
, ucg
, ag
, sift
, ack
, pt
oder ähnliches, da es auf Rusts Regex-Engine basiert, die endliche Werte verwendet Automaten-, SIMD- und aggressive wörtliche Optimierungen, um die Suche sehr schnell zu machen.
Es unterstützt Ignoriermuster, die in .gitignore
-Dateien angegeben sind, sodass ein einzelner Dateipfad gleichzeitig mit mehreren Glob-Mustern abgeglichen werden kann.
Sie können die allgemeinen Parameter verwenden, z.
-i
- Unempfindliche Suche.-I
- Ignoriere die Binärdateien.-w
- Suche nach den ganzen Wörtern (im Gegensatz zur partiellen Wortübereinstimmung).-n
- Zeigen Sie die Zeile Ihres Matches an.-C
/--context
(z. B. -C5
) - Erhöht den Kontext, sodass Sie den umgebenden Code sehen.--color=auto
- Markieren Sie den passenden Text.-H
- Zeigt den Dateinamen an, in dem sich der Text befindet.-c
- Zeigt die Anzahl der übereinstimmenden Zeilen an. Kann mit -H
kombiniert werden.Wenn Ihr grep
keine rekursive Suche unterstützt, können Sie find
mit xargs
kombinieren:
find / -type f | xargs grep 'text-to-find-here'
Ich finde das leichter zu merken als das Format für find -exec
.
Dadurch werden der Dateiname und der Inhalt der übereinstimmenden Zeile ausgegeben, z.
/home/rob/file:text-to-find-here
Optionale Flags, die Sie möglicherweise zu grep
hinzufügen möchten:
-i
- Suche ohne Berücksichtigung der Groß-/Kleinschreibung-l
- Nur den Dateinamen ausgeben, in dem die Übereinstimmung gefunden wurde-h
- Nur die übereinstimmende Zeile ausgeben (nicht den Dateinamen)grep -insr "pattern" *
i
: Ignoriert die Unterscheidung zwischen Groß- und Kleinschreibung sowohl im PATTERN als auch in den Eingabedateien.n
: Stellen Sie jeder Ausgabezeile die auf 1 basierende Zeilennummer in der Eingabedatei voran.s
: Unterdrückt Fehlermeldungen zu nicht vorhandenen oder nicht lesbaren Dateien.r
: Alle Dateien in jedem Verzeichnis werden rekursiv gelesen.Wie finde ich alle Dateien, die bestimmten Text enthalten, unter Linux? (...)
Ich bin zweimal auf diese Lösung gestoßen:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Wenn Sie find wie in Ihrem Beispiel verwenden, sollten Sie -s
(--no-messages
) zu grep
hinzufügen. und 2>/dev/null
am Ende des Befehls, um viele Nachrichten mit verweigerter Berechtigung zu vermeiden, die von grep
und find
ausgegeben werden:
find / -type f -exec grep -sH 'text-to-find-here' {} \; 2>/dev/null
find ist das Standardwerkzeug zum Durchsuchen von Dateien - kombiniert mit grep, wenn nach spezifischem Text gesucht wird - auf Unix-ähnlichen Plattformen. Der find Befehl wird übrigens oft mit xargs kombiniert.
Für den gleichen Zweck gibt es schnellere und einfachere Werkzeuge - siehe unten. Probieren Sie sie besser aus , sofern sie auf Ihrer Plattform verfügbar sind . Natürlich:
RipGrep - schnellstes Suchwerkzeug um:
rg 'text-to-find-here' / -l
ag 'text-to-find-here' / -l
ack:
ack 'text-to-find-here' / -l
Hinweis: Sie können diesen Befehlen auch 2>/dev/null
hinzufügen, um viele Fehlermeldungen auszublenden.
Warnung : Wenn Sie dies nicht wirklich vermeiden können, suchen Sie nicht nach '/' (das Stammverzeichnis) um eine lange und ineffiziente Suche zu vermeiden! In den obigen Beispielen sollten Sie '/' durch einen Unterverzeichnisnamen ersetzen, z. "/ home" abhängig davon, wo Sie tatsächlich suchen möchten ...
Es gibt ein neues Dienstprogramm namens The Silversearcher
Sudo apt install silversearcher-ag
Es arbeitet eng mit Git und anderen VCS zusammen. Sie erhalten also nichts in einem .git oder einem anderen Verzeichnis.
Sie können einfach verwenden
ag "Search query"
Und es wird die Aufgabe für Sie erledigen!
Versuchen:
find . -name "*.txt" | xargs grep -i "text_pattern"
Verwenden Sie pwd
, um von jedem Verzeichnis aus zu suchen, in dem Sie sich gerade befinden
grep -rnw `pwd` -e "pattern"
pdate Abhängig von der verwendeten Version von grep können Sie pwd
weglassen. In neueren Versionen scheint .
der Standardfall für grep zu sein, wenn kein Verzeichnis angegeben ist:
grep -rnw -e "pattern"
oder
grep -rnw "pattern"
mache das gleiche wie oben!
grep
kann verwendet werden, auch wenn wir keinen String suchen.
Einfach laufen,
grep -RIl "" .
druckt den Pfad zu allen Textdateien aus, d. h. zu solchen, die nur druckbare Zeichen enthalten.
Hier sind einige Befehle aufgelistet, die zum Durchsuchen von Dateien verwendet werden können.
grep "text string to search” directory-path
grep [option] "text string to search” directory-path
grep -r "text string to search” directory-path
grep -r -H "text string to search” directory-path
egrep -R "Word-1|Word-2” directory-path
egrep -w -R "Word-1|Word-2” directory-path
Ein einfaches find
kann praktisch sein. alias es in deiner ~/.bashrc
Datei:
alias ffind find / -type f | xargs grep
Starten Sie ein neues Terminal und geben Sie Folgendes aus:
ffind 'text-to-find-here'
find /path -type f -exec grep -l "string" {} \;
Erklärung aus Kommentaren
find ist ein Befehl, mit dem Sie Dateien und andere Objekte wie Verzeichnisse und Verknüpfungen in Unterverzeichnissen eines bestimmten Pfads finden können. Wenn Sie keine Maske angeben, der Dateinamen entsprechen sollen, werden alle Verzeichnisobjekte aufgelistet.
-type f specifies that it should proceed only files, not directories etc.
-exec grep specifies that for every found file, it should run grep command, passing its filename as an argument to it, by replacing {} with the filename
Hoffe das ist hilfreich ...
Erweitern Sie das grep
ein wenig, um mehr Informationen in der Ausgabe zu erhalten, beispielsweise um die Zeilennummer in der Datei zu erhalten, in der sich der Text befindet.
_find . -type f -name "*.*" -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"
_
Wenn Sie eine Vorstellung vom Dateityp haben, können Sie die Suche eingrenzen, indem Sie die zu suchenden Dateityperweiterungen angeben. In diesem Fall _.pas
_ OR _.dfm
_ Dateien:
_find . -type f \( -name "*.pas" -o -name "*.dfm" \) -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searchtext"
_
Kurze Erläuterung der Optionen:
.
_ im find
gibt aus dem aktuellen Verzeichnis an.-name
_ "_*.*
_": Für alle Dateien (-name "_*.pas
_" -o -name "_*.dfm
_"): Nur der _*.pas
_ OR _*.dfm
_ Dateien, OR angegeben mit _-o
_-type f
_ gibt an, dass Sie nach Dateien suchen-print0
_ und _--null
_ auf der anderen Seite des _|
_ (Pipe) sind die entscheidenden und übergeben den Dateinamen vom find
zum grep
, das in der eingebetteten xargs
ermöglicht die Übergabe von Dateinamen MIT Leerzeichen in den Dateinamen, sodass grep den Pfad und den Dateinamen als eine Zeichenfolge behandelt und nicht in einzelne Leerzeichen aufteilt.Silver Searcher ist ein großartiges Tool, aber Ripgrep kann noch besser sein.
Es funktioniert unter Linux, Mac und Windows und wurde vor ein paar Monaten auf Hacker News geschrieben (dies hat einen Link zu Andrew Gallants Blog, der einen GitHub-Link hat):
Versuchen:
find / -type f -exec grep -H 'text-to-find-here' {} \;
dadurch werden alle Dateisysteme durchsucht, da /
der Stammordner ist.
Für den Heimordner:
find ~/ -type f -exec grep -H 'text-to-find-here' {} \;
Für den aktuellen Ordner verwenden Sie:
find ./ -type f -exec grep -H 'text-to-find-here' {} \;
Ich habe ein Python-Skript geschrieben, das etwas Ähnliches tut. So sollte man dieses Skript verwenden.
./sniff.py path pattern_to_search [file_pattern]
Das erste Argument, path
, ist das Verzeichnis, in dem wir rekursiv suchen. Das zweite Argument, pattern_to_search
, ist ein regulärer Ausdruck, den wir in einer Datei suchen möchten. Wir verwenden das reguläre Ausdrucksformat, das in der Bibliothek Pythonre
definiert ist. In diesem Skript stimmt der .
auch mit Newline überein.
Das dritte Argument, file_pattern
, ist optional. Dies ist ein weiterer regulärer Ausdruck, der mit einem Dateinamen arbeitet. Es werden nur die Dateien berücksichtigt, die diesem regulären Ausdruck entsprechen.
Wenn ich zum Beispiel nach Python Dateien mit der Erweiterung py
suchen möchte, die Pool(
gefolgt von Word Adaptor
enthält, gehe ich folgendermaßen vor:
./sniff.py . "Pool(.*?Adaptor" .*py
./Demos/snippets/cubeMeshSigNeur.py:146
./Demos/snippets/testSigNeur.py:259
./python/moose/multiscale/core/mumbl.py:206
./Demos/snippets/multiComptSigNeur.py:268
Und voila generiert den Pfad der übereinstimmenden Dateien und die Zeilennummer, in der die Übereinstimmung gefunden wurde. Wenn mehr als eine Übereinstimmung gefunden wurde, wird jede Zeilennummer an den Dateinamen angehängt.
grep ist dein guter Freund, um dies zu erreichen.
grep -r <text_fo_find> <directory>
wenn Sie sich nicht für den zu findenden Text interessieren, verwenden Sie
grep -ir <text_to_find> <directory>
Verwenden:
grep -c Your_Pattern *
Dies gibt an, wie viele Kopien Ihres Musters sich in jeder der Dateien im aktuellen Verzeichnis befinden.
So suchen Sie nach der Zeichenfolge und geben nur diese Zeile mit der Suchzeichenfolge aus:
for i in $(find /path/of/target/directory -type f); do grep -i "the string to look for" "$i"; done
z.B.:
for i in $(find /usr/share/applications -type f); \
do grep -i "web browser" "$i"; done
So zeigen Sie den Dateinamen an, der die Suchzeichenfolge enthält:
for i in $(find /path/of/target/directory -type f); do if grep -i "the string to look for" "$i" > /dev/null; then echo "$i"; fi; done;
z.B.:
for i in $(find /usr/share/applications -type f); \
do if grep -i "web browser" "$i" > /dev/null; then echo "$i"; \
fi; done;
Es gibt ein ack
Tool, das genau das macht, wonach Sie suchen.
http://linux.die.net/man/1/ack
ack -i search_string folder_path/*
Sie können -i
bei der Suche nach Groß- und Kleinschreibung ignorieren
Alle vorherigen Antworten schlagen grep und find vor. Aber es gibt noch einen anderen Weg: Verwenden Sie Midnight Commander
Es ist ein kostenloses Dienstprogramm (30 Jahre alt, nachweislich), das visuell ist, ohne GUI zu sein. Es hat Unmengen von Funktionen, und das Auffinden von Dateien ist nur eine davon.
Der folgende Befehl funktioniert gut für diesen Ansatz:
find ./ -name "file_pattern_name" -exec grep -r "pattern" {} \;
Versuche dies:
find . | xargs grep 'Word' -sl
Wenn Sie find
unbedingt verwenden möchten, dann:
_find /path/to/somewhere/ -type f -exec grep -nw 'textPattern' {} \;
_
find + grep
1. Verwenden Sie find
, um nach Dateien zu suchen. 2. Führen Sie dann grep
für alle aus.
Kann wie folgt in einem Befehl kombiniert werden:
_find /path/to/somewhere/ -type f -exec grep -nw 'textPattern' {} \;
_
Verwenden Sie _-name Pattern
_, wenn Sie nur bestimmte Dateien grep
möchten:
_find /path/to/somewhere/ -type f -name \*.cpp -exec grep -nw 'textPattern' {} \;
_
Dies gibt Ihnen die Möglichkeit, mit find
Dateien zu finden. Sie können damit spielen und verschiedene Optionen von find
verwenden, um Ihre Dateisuche zu verbessern oder einzugrenzen.
Ich bin fasziniert, wie einfach grep es mit 'rl' macht
grep -rl 'pattern_to_find' /path/where/to/find
-r to find recursively file / directory inside directories..
-l to list files matching the 'pattern'
Verwenden Sie '-r' ohne 'l', um die Dateinamen gefolgt von Text anzuzeigen, in dem sich das Muster befindet !
grep -r 'pattern_to_find' /path/where/to/find
Funktioniert einfach perfekt ..
Ich hoffe es hilft!
Sie können den folgenden Befehl verwenden, da Sie keinen Dateinamen möchten, aber alle Dateien durchsuchen möchten. Hier erfasse ich das "TEXT" -Formular. Alle Protokolldateien stellen sicher, dass der Dateiname nicht gedruckt wird
grep -e TEXT *.log | cut -d' ' --complement -s -f1
die Option grep with -e ist im Vergleich zu anderen Optionen ziemlich schnell, da es sich um eine PATTERN-Übereinstimmung handelt
Vermeiden Sie den Ärger und installieren Sie ack-grep. Es werden viele Probleme mit Berechtigungen und Zitaten beseitigt.
apt-get install ack-grep
Gehen Sie dann zu dem Verzeichnis, in dem Sie suchen möchten, und führen Sie den folgenden Befehl aus
cd /
ack-grep "find my keyword"
find
mit xarg
s wird bevorzugt, wenn es viele mögliche Übereinstimmungen gibt, die gesichtet werden müssen. Es läuft langsamer als andere Optionen, funktioniert aber immer. Wie einige festgestellt haben, verarbeitet xargs
standardmäßig keine Dateien mit eingebetteten Leerzeichen. Sie können dies umgehen, indem Sie die Option -d
angeben.
Hier ist die Antwort von @ RobEarl, die so erweitert wurde, dass sie Dateien mit Leerzeichen verarbeitet:
find / -type f | xargs -d '\n' grep 'text-to-find-here'
Hier ist die Antwort von @ venkat, ähnlich verbessert:
find . -name "*.txt" | xargs -d '\n' grep -i "text_pattern"
Hier ist @Gert van Biljons Antwort, ähnlich verbessert:
find . -type f -name "*.*" -print0 | xargs -d '\n' --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"
Hier ist die Antwort von @ LetalProgrammer, ähnlich verbessert:
alias ffind find / -type f | xargs -d '\n' grep
Hier ist die Antwort von @Tayab Hussain, ähnlich verbessert:
find . | xargs -d '\n' grep 'Word' -sl
Wenn Sie eine Reihe von Dateien haben, die Sie immer überprüfen, können Sie deren Pfade aliasen, zum Beispiel:
alias fd='find . -type f -regex ".*\.\(inc\|info\|module\|php\|test\|install\|uninstall\)"'
Dann können Sie die Liste einfach so filtern:
grep -U -l $'\015' $(fd)
Welche filtert die Liste fd auf Dateien, die das CR-Muster enthalten.
Ich finde, dass das Aliasing der Dateien, an denen ich interessiert bin, mir hilft, einfachere Skripte zu erstellen, als mich immer daran zu erinnern, wie all diese Dateien abgerufen werden können. Das rekursive Zeug funktioniert auch, aber früher oder später müssen Sie sich mit dem Aussortieren bestimmter Dateitypen herumschlagen. Deshalb finde ich zunächst alle Dateitypen, die mich interessieren.
Versuche dies:
find / -type f -name "*" -exec grep -il "String_to_search" {} \;
Oder
for i in /*;do grep -Ril "String_to_search" $i;done 2> /dev/null
Verwenden:
grep -Erni + "text you wanna search"
Der Befehl durchsucht alle Dateien und Verzeichnisse des aktuellen Verzeichnisses rekursiv und gibt das Ergebnis aus.
Hinweis: Wenn Ihre grep-Ausgabe nicht farbig ist, können Sie sie mithilfe des Alias grep = 'grep --color = always' in Ihrer Shell-Quelldatei ändern.
Mit den folgenden Befehlen können Sie bestimmten Text aus einer Datei suchen:
cat file | grep 'abc' | cut -d':' -f2
Als Peter in der vorherigen Antwort erwähnt , schlagen alle vorherigen Antworten grep und find vor.
Aber es gibt eine ausgefeiltere Möglichkeit, Gnome Commander mit einem perfekten GUI und mit Tonnen von Optionen seit 2001 zu verwenden, und Dateien zu finden ist nur einer von ihnen. Es ist auch ein kostenloses Dienstprogramm, das sich durch seine Zeit bewährt hat.
Versuche dies
find . -type f -name some_file_name.xml -exec grep -H PUT_YOUR_STRING_HERE {} \;
Siehe auch The Platinum Searcher , was The Silver Searcher ähnelt und in Go geschrieben ist.
Beispiel:
pt -e 'text to search'
GUI-Suchalternative - Zur Verwendung auf dem Desktop:
- Da die Frage nicht genau nach Befehlen fragt
Searchmonkey : Erweitertes Dateisuchwerkzeug, ohne dass Sie Ihr System mit regulären Ausdrücken indizieren müssen. Grafisches Äquivalent zu find/grep. Verfügbar für Linux (Gnome/KDE/Java) und Windows (Java) - Open Source GPL v3
Funktionen:
Download - Links:
.
Screenshot:
ihr Befehl ist richtig. Müssen nur -l zu grep hinzufügen.
find / -type f -exec grep -l 'text-to-find-here' {} \;