Volltextsuche mit find|grep|cat?

Hallo!

Das ist vielleicht eine dumme Frage, aber ich bastele schon einige Zeit rum, und komme nicht drauf.

Müßte es nicht theoretisch möglich sein, mit find, grep und cat eine Volltextsuche durchzuführen?

Irgendwas wie find / | cat | grep ?

Ziel wäre, das mir alle Dateien, die enthalten, ausgeworfen werden.
find / wirft einfach alle Dateien (und Ordner) aus, die vom Wurzelverzeichniss aus verzweigen. cat wirft sie aus, wenn sie Text enthalten, und grep sucht dann daraus das Schlüßelwort. Klappt aber nicht.

Liege ich irgendwie falsch?

(Mir ist klar, das es effizientere Wege gibt, Dateien zu finden, aber ich würde es gerne aus keinen bestimmten Gründen mit den 3 Befehlen machen)

Viele Grüße!
Ph.

Liege ich irgendwie falsch?

Ja, weil Du das cat auf jedes Element, was find Dir ausgibt anwenden mußt:

for I in find /; do cat $I; done | grep foo

Das gibt aber nur die Zeile, in der ‚foo‘ steht aus, ohne, daß du siehst, aus welcher Datei das nun stammt. Außerdem ist es etwas noisy, weil sich cat über alle Verzeichnisse aufregt.

Moin,

Müßte es nicht theoretisch möglich sein, mit find, grep und
cat eine Volltextsuche durchzuführen?

Irgendwas wie find / | cat | grep ?

find / -print0 |xargs -0 grep foo

oder wenn dich nur der Dateiname interessiert:

find / -print0 |xargs -0 grep -l foo

Ansonsten gibt es immer noch grep -r.

Grüße,
Moritz

Hallo Scrabz,

Müßte es nicht theoretisch möglich sein, mit find, grep und
cat eine Volltextsuche durchzuführen?
Irgendwas wie find / | cat | grep ?

Ja, ist aber völlig überdimensioniert. grep alleine wühlt sich mit -r schon durch die Verzeichnisse, mit anderen Worten, ein

grep -ri foo /

mit root-Rechten versehen, klappert deine ganzen Dateien auf der Suche nach Dateien, die foo (in irgendeiner Kombination von Gross- und Kleinbuchstaben) enthalten, ab. Und das ganz ohne find und cat, die durch die doppelte Pipe alles eh nur verlangsamen würden.
Das ist aber doch etwas theoretisch, denn zumindest wenn Du vom Wurzelverzeichnis aus anfangen willst, kommst Du in etliche „Dateien“, die Du lieber vermeiden solltest, z.B. alles mit /dev. Und macht es Sinn, binäre Dateien zu durchsuchen (könntest Du mit -I ausschliessen), Soft- und Hardlinks zu folgen, usw.?

(Mir ist klar, das es effizientere Wege gibt, Dateien zu
finden, aber ich würde es gerne aus keinen bestimmten Gründen
mit den 3 Befehlen machen)

Wenn es auch ein Befehl sein darf, schlage ich also

grep -Iri 

vor, wobei ich empfehle, für doch maximal mit /home zu beginnen.

Viele Grüße
Marvin

Hallo,

Außerdem ist es
etwas noisy, weil sich cat über alle Verzeichnisse aufregt.

… deshalb sollte man sich vorher überlegen, in welchen Verzeichniseinträgen man grept.

„man find“ , Stichwort „-type“ wird wohl helfen …

HIA,

Sebastian

Hallo,

Außerdem ist es
etwas noisy, weil sich cat über alle Verzeichnisse aufregt.

… deshalb sollte man sich vorher überlegen, in welchen
Verzeichniseinträgen man grept.

„man find“ , Stichwort „-type“ wird wohl helfen …

HIA,

Jau, wir müssen und nicht drüber streiten, daß das ganze Unternehmen mehr als suboptimal ist. Es wurden ja auch schon weitaus bessere Lösungen von anderen hier gepostet. Ich hatte gedacht, daß es hier mehr um das Verständnis von der Funktion der Pipe, bzw. dem Abarbeiten der jeweils gelieferten Ergebnisse ging.