Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 8 Mar 2006 02:21:51 +0300
From:      Yar Tikhiy <yar@comp.chem.msu.su>
To:        Jilles Tjoelker <jilles@stack.nl>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: find(1) -d vs -prune; /etc/periodic/daily/100.clean-disks
Message-ID:  <20060307232151.GA91873@comp.chem.msu.su>
In-Reply-To: <20060306174058.GA32164@stack.nl>
References:  <20060306174058.GA32164@stack.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Mar 06, 2006 at 06:40:58PM +0100, Jilles Tjoelker wrote:
> 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?

The property of -prune with respect to -d is already documented on the
find(1) manpage.

As for 100.clean-disks, I fail to see why -prune is needed there.
One can mount a file system read-write at a directory of a read-only
file system.  Some bullet-proof installations have their / mounted
read-only.  Perhaps the invocation of find(1) in 100.clean-disks
should be as follows:

	find / -fstype local ! -fstype rdonly \( $args \) ...

Does it make sense?

-- 
Yar



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060307232151.GA91873>