xargs
erwartet Eingaben in einem Format, das kein anderer Befehl erzeugt, daher ist es schwierig, ihn effektiv zu verwenden. Was hier falsch läuft, ist, dass Sie eine Datei haben, deren Name bei der Eingabe in xargs
in Anführungszeichen gesetzt werden muss (enthält wahrscheinlich einen '
).
Wenn Ihr grep den -r
unterstützt oder -R
Option für die rekursive Suche, verwenden Sie sie.
grep -r word .
Verwenden Sie andernfalls den -exec
primär von find
. Dies ist der übliche Weg, um den gleichen Effekt wie xargs
zu erzielen , außer ohne Einschränkungen für Dateinamen. Ziemlich aktuelle Versionen von find
ermöglichen es Ihnen, mehrere Dateien in einem einzigen Aufruf des Hilfsbefehls zu gruppieren. Bestehen von /dev/null
bis grep
stellt sicher, dass der Dateiname vor jeder Übereinstimmung angezeigt wird, selbst 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) kann den Hilfsbefehl 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, indem sie Nullzeichen verwenden, 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 vermute, du meinst die erste Option
grep rekursiv, zum Suchen von Inhalten in Dateien
grep -R "content_to_search" /path/to/directory
ls rekursiv, um passende 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
verwenden und -0
um die üblichen Zitierprobleme zu umgehen:
find . -type f -print0 | xargs -0 grep word