Warum gibt mir `find . -path ./.git -prune -o \( -type f -a -executable \)` auch `./.git` als Ergebnis? So wie ich die Manpage verstehe sollte es das eben nicht, und auf `-type f` matcht es ja auch nicht.

@qsx Ich verstehe das so dass der Trick bei dem Beispiel

find . -path ./src/emacs -prune -o -print

ist, dass -o short-circuited und das explizite -print das implizite -print über die gesamte Expression deaktiviert. Das führt dazu dass -print nur passiert wenn -prune false ist.

Analog in deinem Fall scheint

find . -path ./.git -prune -o \( -type f -a -executable -a -print \)

das Richtige zu tun.