Der Titel Ihrer Frage lautet "Dateien mit einem Wort". In Ihrer Frage erwähnen Sie jedoch "erhalten die Dateinamen, die ein Wort enthalten". Das sind verschiedene Dinge. Zum Glück sind beide ziemlich einfach, deshalb zeige ich es euch einfach.
So finden Sie Dateien, die ein Wort enthalten:
grep -iR "word1".
Der -i sagt, den Fall zu ignorieren. Das -R ist rekursiv (dh es werden Unterverzeichnisse durchsucht). (Großbuchstaben werden von OpenBSD dokumentiert und ähneln ls, daher bevorzuge ich das über -r.) Der Zeitraum gibt an, wo er anfangen soll.
So finden Sie Dateinamen, die ein Wort enthalten:
finden . -iname " word1 "
Der -iname ist eine von "name" zwischen Groß- und Kleinschreibung unterschiedene Version.
Der Zeitraum gibt an, wo Sie suchen sollen. Das aktuelle Verzeichnis ist oft eine gute Wahl.
Hinweis: Sie haben in einem Ihrer Beispiele auf " . " Verwiesen . Das war großartig für DOS und normalerweise gut für Microsoft Windows, aber für Unix-Umgebungen eine schlechte Angewohnheit. Wenn ich das sehe, denke ich, dass Sie mit Windows vertraut sind. Nun, verstehen Sie, dass in Windows "FIND" (oder "find") Text in Dateien findet. Unix unterscheidet sich: "grep" sucht nach Text in Dateien und "find" nach Dateinamen.
Um nun das Wort 99 auszuschließen und in eine Textdatei einzufügen, fügen Sie den folgenden Text hinzu:
| grep -v word99 >> output.txt
Dies ist der Pipe-Key, fast immer Shift-Backslash.
Wenn Sie also beides ausführen möchten, verwenden Sie Folgendes:
grep -iR "word1". | grep -v word99 >> output.txt
find. -iname " word1 " | grep -v word99 >> output.txt
Der Teil vor dem Pipe-Zeichen führt einen Befehl aus und sendet die Ausgabe in eine Unix-Pipe. Dann wird der Inhalt von der Pipe an die Standardeingabe des nächsten Befehls gesendet. grep -v prüft die empfangenen Standardeingaben und schließt aus, was Sie möchten. grep -v sendet die verbleibenden Ergebnisse an seine Standardausgabe. Der >> leitet die Standardausgabe des vorherigen Befehls an das Ende der angegebenen Textdatei weiter.
Der Grund, warum Sie im Befehl "find" keine dokumentierten Optionen zum Ausschließen von Text sehen, ist, dass Unix sehr stark mit der Idee entworfen wurde, einfachere Programme zu erstellen und die Piping-Technik zu verwenden, um komplizierte Effekte zu verursachen. In Microsoft-Umgebungen war der alte Microsoft-Code insbesondere bei der Verarbeitung von Pipes umständlicher, weshalb Programme grundsätzlich versuchten, mehr Funktionalität in jedes Programm zu integrieren. Auf der einen Seite scheint das für den Endbenutzer einfacher zu sein (da alles eingebaut ist), aber dieser Ansatz ist nicht konsistent. Wenn Sie mit Unix arbeiten, haben Sie keine Angst vor dem Paspeln: Wenn Sie sich erst einmal daran gewöhnt haben, werden Sie vielleicht die Dinge sehr vereinfachen, aber Sie können Ihre einfachen Werkzeuge in vielen Situationen verwenden und brauchen dies nicht einfache Techniken immer wieder neu erlernen (für jedes unterschiedliche Programm).