Wie kann ich in der BASH Dateien an ein anderes Programm weiterleiten?



  • Ich habe mehrere Textdateien über einen Verzeichnisbaum verteilt.

    Mit find -name *.txt kann ich diese Textdateien zwar finden, aber nun will ich sie noch mit grep durchsuchen.

    Wenn ich folgendes ausführe:
    find -name *.txt | grep SUCHBEGRIFF

    Dann wird logischerweise nur die Ausgabe von finde durchsucht, nicht aber die Dateien die in der Ausgabe angegeben sind.
    Wie mache ich das also, daß die Dateien die in der Ausgabe angegeben werden durchsucht werden?



  • Dafür gibt es die exec-Option:
    find . -iname '*.txt' -exec grep -l foobar {} \;
    (Ja, die Syntax ist seltsam. {} wird durch den Dateinamen ersetzt und \; gibt an, dass die Exec-Anweisung zu Ende ist.)

    Aber schau am besten Mal, ob ack nicht auch eine Option zum Suchen von Textfiles hat, das ist sonst auch extrem praktisch.

    edit: Die -l-Option ist hier wohl sinnvoll.



  • Besten Dank.

    Das Funktioniert wunderbar.



  • -exec hat leider ein paar prinzipbedingte Sicherheitsprobleme, die sich nicht reparieren lassen. Deswegen wird unter Linux und anderen Systemen, die ein GNU-find o.ä. haben, normalerweise -execdir bevorzugt. Die Syntax ist die gleiche wie bei -exec, du kannst in deinem Befehl also einfach -exec durch -execdir ersetzen und dadurch einige Sicherheitslücken vermeiden.
    Die Details sind erklärt auf http://www.gnu.org/software/findutils/manual/html_node/find_html/Security-Considerations-for-find.html .


Anmelden zum Antworten