Antworten:
xargs
Erwartet Eingaben in einem Format, das von keinem anderen Befehl erstellt wird, sodass eine effektive Verwendung schwierig ist. Was hier falsch läuft, ist, dass Sie eine Datei haben, deren Name bei der Eingabe in Anführungszeichen gesetzt werden muss xargs
(wahrscheinlich mit einem '
).
Wenn Ihr grep die Option -r
oder -R
für die rekursive Suche unterstützt, verwenden Sie sie.
grep -r word .
Verwenden Sie andernfalls die -exec
Primärdaten von find
. Dies ist die übliche Methode, um den gleichen Effekt wie zu erzielen xargs
, außer ohne Einschränkungen bei den Dateinamen. Mit den neuesten Versionen von find
können Sie mehrere Dateien in einem einzigen Aufruf des Hilfsbefehls gruppieren. Durch /dev/null
die Übergabe an wird grep
sichergestellt, dass der Dateiname vor jeder Übereinstimmung angezeigt wird, auch wenn er zufällig für eine einzelne Datei aufgerufen wird.
find . -type f -exec grep word /dev/null {} +
Ältere Versionen von find
(auf älteren Systemen oder OpenBSD oder reduzierten Dienstprogrammen wie BusyBox) können den AUX-Befehl immer nur für eine Datei gleichzeitig aufrufen.
find . -type f -exec grep word /dev/null {} \;
Einige Versionen von find
und xargs
haben Erweiterungen, mit denen sie korrekt kommunizieren können. Dabei werden Nullzeichen verwendet, um Dateinamen zu trennen, sodass keine Anführungszeichen erforderlich sind. Heutzutage hat nur OpenBSD diese Funktion ohne -exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
Ich denke du meinst die erste Option
grep rekursiv, zum Durchsuchen von Inhalten in Dateien
grep -R "content_to_search" /path/to/directory
Es ist rekursiv, um nach passenden Dateien zu suchen
ls -lR | grep "your_search"
Wenn Sie die GNU-Tools haben (was Sie tun, wenn das Linux-Tag korrekt ist), können Sie -print0
und verwenden -0
, um die üblichen Probleme beim Zitieren zu umgehen:
find . -type f -print0 | xargs -0 grep word
Im aktuellen Verzeichnis können Sie grep verwenden:
grep -irl root .
Ich denke, Sie möchten eine Zeichenfolge in Dateien finden
Versuchen find . -name "*" | xargs grep -l "string"
/dev/null
. Es ist ärgerlich, wenn das Ausgabeformat variieren kann, je nachdem, wie viele Dateien übereinstimmen ... danke.