Categories
Linux

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 ;-).

One reply on “find -exec mit Pipe”

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!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.