find -exec mit Pipe

„find“ ist noch mächtiger in Zusammenhang mit dem „-exec“ Parameter – bisher war mir aber nicht klar wie man eine Pipe innerhalb des -exec Abschnitts benutzen kann:

find . -type f -exec sh -c 'cat {} | grep "hello world"' ;

Der Trick ist eine Shell (in diesem Falle „sh“) aufzurufen. Das Kommando oben ist nur ein Beispiel und macht natürlich keinen Sinn 😉.

Eine Antwort auf „find -exec mit Pipe“

  1. DANKE!

    An diesem Problem habe ich gerade etwas herumgeknöchelt, und dank deinem Tip die Lösung gefunden!
    Da mein Beispiel wohl etwas praxisnaher sein dürfte, will ich es hier auch mal vorstellen.

    (Zweck: finde das Process-ID für einen laufenden mplayer-Prozess; macht z. B. in Python-Scripten Sinn wenn man das „now playing“ auslesen will)
    Erstmal die Zeile, die so NICHT geht:

    find -P /proc -maxdepth 3 -type l -name ‚exe‘ 2>/dev/null -exec readlink {} | grep mplayer \;

    Auch folgendes klappt nicht:

    find -P /proc -maxdepth 3 -type l -name ‚exe‘ 2>/dev/null -exec ‚readlink {} | grep mplayer‘ \;

    Und die Lösung:
    find -P /proc -maxdepth 3 -type l -name ‚exe‘ 2>/dev/null -exec sh -c ‚readlink {} | grep mplayer‘ \;

    ABER dafür muss natürlich der mplayer in einem anderen Terminal gestartet und momentan am laufen sein, sonst gibt grep nichts zurück!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.