find(1) -d vs -prune; /etc/periodic/daily/100.clean-disks

Jilles Tjoelker jilles at stack.nl
Mon Mar 6 17:41:00 UTC 2006


find(1)'s -prune primary does not work if depth-first traversal (-d,
-depth, also implied by -delete) is in effect. The reason is that it is
(obviously) not possible to prune a directory when visiting it after all
entries in it.

This causes /etc/periodic/daily/100.clean-disks (if enabled) to recurse
through all read-only and NFS filesystems as well.

More concrete examples:

find -d / \( '!' -fstype local -o -fstype rdonly \) -a -prune -o \( -name '*.core' -o -name '.nfs[A-z][0-9a-f][0-9a-f][0-9a-f][0-9a-f]4.4' \) -atime +1 -print >/dev/null 2>&1

find /someserver.mnt \( '!' -fstype local -o -fstype rdonly \) -a -prune -print >/dev/null 2>&1
(/someserver.mnt assumed to be not a mount point here)

Possible solutions/workarounds:
1. do still call -prune and some primaries without side effects
   in pre-order even if -d is in effect, even though this does not
   fit at all in find(1)'s design.
2. document the bug and run a find -x over all local r/w filesystems
   in 100.clean-disks (-x and -d work together properly).

What would be the best way to go on?

-- 
Jilles Tjoelker


More information about the freebsd-hackers mailing list