Warum gibt mir `find .
-
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.
-
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 "-prune True; if the file is a directory, do not descend into it." Also es ist selbst true (d.h.: matcht), aber steigt nicht ab.
Im Grunde bräuchtest du: find . \! \( -path ./.git -prune \) -a \( sonstige Tests \)
Erster Teil: prunet und matcht auf alles außer .git selbst
Zweiter Teil nach -a (nicht -o): eigentliche Tests(Keine Ahnung warum das so nicht im Beispiel in der Manpage steht)
-
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.
-
R relay@relay.infosec.exchange shared this topic