Es gefunden!
Zuerst habe ich die Option -s
Fehler zu unterdrücken, die von here vorgeschlagen, aber @Kelvin 's Kommentar erinnerte mich der wahre Grund ist, dass meine vielen Dateien die Namen der spaces
hat.
So um den richtigen Befehl:
$ find . -name "*.md" -print0 | xargs -0 grep "some-text-want-to-find"
(auf os x)
hier etwas deutlichere Erklärung gefunden:
Unix-ähnliche Systeme ermöglichen spaces
eingebettet (und sogar Zeilenumbrüche!) in Dateinamen. Dies verursacht Probleme für Programme wie xargs
, die Argumentlisten für andere Programme erstellen. Ein eingebetteter space
wird als Trennzeichen behandelt und der resultierende Befehl interpretiert jedes durch Leerzeichen getrennte Wort als separates Argument. Um dies zu umgehen, ermöglichen find
und xarg
die optionale Verwendung eines null
Charakters als Argumenttrennzeichen. Ein null
Zeichen ist in ASCII als das Zeichen definiert, das durch die Zahl Null repräsentiert wird (im Gegensatz zu beispielsweise dem Zeichen space
, das in ASCII als das durch die Zahl 32 dargestellte Zeichen definiert ist). Der Befehl find liefert die Aktion -print0
, die den getrennten Ausgang null
erzeugt, und der Befehl xargs
hat die Option –null
, die den getrennten Eingang null
akzeptiert.
- Die Linux-Befehlszeile: Eine komplette Einführung von William E. Shotts
Warnung: Wenn Sie auf os x sind, getrennt die Nulloption von xargs
Befehl –0
ist
2017-05-27 Aktualisiert 22:58:48
Dank @Sundeep, wer schlug mir vor, -exec
, ein neues Feature in find
selbst zu verwenden, anstatt xargs
.
diese So verwenden Dateien im aktuellen Verzeichnis und dessen Unter dirs suchen:
$ find . -type f -name "*.md" -exec grep "some-text-want-to-find" {} +
Hinweis:
What is meaning of {} + in find's -exec command? - Unix & Linux Stack Exchange
, wenn Sie Dateien nur im aktuellen Verzeichnis suchen möchten, ohne nach innen zu gehen sub-dirs, benutze einfach 'grep 'interpretation' * .md' ... und wenn du auch sub-dir brauchst, benutze' -type f' und '-exec' mit' find' anstelle von xargs – Sundeep
@Sundeep, Vielen Dank! Ich habe die Verwendung von '-exec' durchsucht und es ist praktisch! Ich werde meine Antwort aktualisieren. Ich bin ein frischer Mann auf der Kommandozeile, sorry dafür :) – Hmgqzx
mit der Befehlszeile ist nie endende Erfahrung ... Sie möchten vielleicht Lesezeichen https://unix.stackexchange.com/questions/321697/why-islooping -over-founds-output-bad-practice, wenn du 'find' regelmäßig verwenden willst – Sundeep