Subject: Re: bug#15926: RFE: unlink command already uses 'unlink' call; make 'rm' use 'remove' call

From: Eric Blake <[email-masked]>
Date: Thu, 21 Nov 2013 06:39:15 -0700

On 11/21/2013 12:12 AM, Bernhard Voelker wrote:

> 
> Admittedly, compared to the academic question behind "--no-preserve-root"
> (which is like "what happens to me when the globe under my feet disappears?"),
> there may be more real-world reasons to remove ".".

But that's not what Linda is asking for.  She is not asking to pull "."
out of under her feet.  Instead, she wants a command that will
recursively remove the children of ".", but then leave "." itself
unremoved (whether by virtue of the fact that rmdir(".") must fail and
so the overall rm command fails, or by explicitly skipping the attempt
to rmdir(".") and letting rm succeed).  Right now, the nanny rule of
POSIX is preventing the recursion, so you have to use contortions such
as the POSIX 'find . -depth ! -name . -exec rm {} +'.  So I think it IS
useful to add an option that forces 'rm -r' to bypass the nanny rule and
recurse on ".".

Maybe naming it --no-preserve-dot is wrong.  Maybe a better name is 'rm
-r --children-only .'.  At which point, I would much rather see us skip
the rmdir(".") in order to allow rm to succeed.  And it would also work
even for non-dot situations: 'rm -r --children-only dir'.  In other
words, I _do_ see what Linda is asking for, and think it is worth providing.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org