Ich habe versucht, ein Muster in allen .c-Dateien auf folgende Weise rekursiv zu durchsuchen
> grep -lr search-pattern *.c
Habe das aber als Ausgabe bekommen
> grep: *.c: No such file or directory
Wenn ich das benutze:
> grep -lr search-pattern *
Ich bekomme viel davon. c Dateien in den Verzeichnissen mit dem Muster.
Was ist falsch an dem früheren Ausdruck?
--include=GLOB
Option nicht. In Kombination mit der rekursiven Option ist dies sehr leistungsfähig und erfordert nichtfind
. Nett!.
am Ende des Befehls ist.Das
*.c
Muster wird von Ihrer Shell ausgewertet. Es gilt für das aktuelle Verzeichnis, genau wie Sie es verwenden würdenls *.c
.Ich denke, was Sie stattdessen wollen, ist, alle Dateien zu finden, die dem
*.c
Muster entsprechen (rekursiv) und daringrep
nach Ihnen zu suchen. Hier ist eine Möglichkeit, dies zu tun:Es wird verwendet
xargs
, um die Suchergebnisse von anzuhängenfind
.Alternativ können Sie die
-exec
Option verwenden, um Folgendes zu finden: z.Ich bin mir auch nicht sicher, ob Sie die
-l
Option wirklich wollengrep
. Es wird beim ersten Spiel aufhören:quelle
find/xargs
Syntax bricht bei Dateinamen ab, die Leerzeichen enthalten. Die-L
Optiongrep
, beim ersten Abgleich jeder Datei zu stoppen und mit der nächsten Datei fortzufahren: Wenn man nur sehen möchte, ob das Muster mindestens einmal in jeder angegebenen Datei enthalten ist, ist es schneller.-print0
Option und behobenxargs --null
.Ich weiß, dass dies ein ziemlich alter Thread ist, aber da ich die gleiche Frage hatte, möchte ich meine bevorzugte Art, dasselbe zu erreichen, in einer viel kürzeren Form teilen.
quelle