Am 25. März 2011 22:22 schrieb Alexander Skwar
<alexanders.mailinglists+nospam@gmail.com>:
Hallo!
2011/3/25 Florian (flobee) <flobee@gmail.com>
> Ich will bestimmte Verzeichnisse nicht weiter durchsuchen um Zeit zu sparen
> eg:
> #> find /home -type f -and \( ! -path "/home/bigStorage/*" -and ! -path "/home/other/*" \) -newer /tmp/stampfile -print
[…]
> Hat jemand Hinweise oder Verbesserungen hierfür?
Verwende statt der "normalen" / doppelten Anführungszeichen " die
einzelnen Anführungszeichen ', bzw. gar keine (oder ") und "escape"
das * durch ein vorangestelltes \; also so:
find /home -type f -and \( ! -path /home/bigStorage/\* -and ! -path
'/home/other/*' \) -newer /tmp/stampfile -print
Dadurch wird verhindert, das die *Shell* das "*" auswertet. Wenn
die Shell das "*" auswerten will, muss sie alle Verzeichnis-/Dateinamen
ermitteln. Bei ' bzw. \* ist das nicht so.
Ich hatte vergessen dieses zu sagen aber dennoch danke für Hinweise!
Schon alles probiert: Geht aber nicht. :-/
strace meldet das genau diese Verzeichnisse ( ! -path '/home/bigStorage/*' dennoch durchgegangen werden.
Ob mit oder ohne *, mit oder ohne -prune, single quotes oder doubble quotes bzw. nur mit * liefert find keine treffer (wie gewünscht), ohne * scheint alles als Treffer zu werden ... da -path ja eigentlich die genaue Angabe des paths verlangt.
Eine alternative mit ! -regex ''/home/bigStorage/' liefert im grunde das gleiche: Keine treffer aber es wird durch die Verzeichnisse die ausgelassen werden sollen durch gegangen. hmm (Kost viel Zeit)
Vielleicht gehts auch einfach nicht und fällt nur auf wenn viele Daten vorliegen !? Oder ein Bug? Aber sonnst würde -prune keinen sinn ergeben. Sollte also gehen.
->-
debian testing
find (GNU findutils) 4.4.2
Erzeugt mit der GNU gnulib Version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Aktivierte Eigenschaften:D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS() CBO(level=0)
-<-
Gruß Florian