Subject: Re: CVS commit: src/usr.bin/find
To: None <soda@sra.co.jp, tech-userlevel@NetBSD.org>
From: ITOH Yasufumi <itohy@NetBSD.org>
List: tech-userlevel
Date: 02/09/2007 13:03:51
In article <17867.22835.442422.757602@srapc2586.sra.co.jp>
soda@sra.co.jp writes:
> >>>>> On Thu, 08 Feb 2007 11:37:48 -0500,
> "Perry E. Metzger" <perry@piermont.com> said:
>
> >> So, we now reached the conclusion that current implementation
> >> shouldn't have the name "-rm". Right?
>
> > Only if it should not have the name "-delete" either. :)
>
> Why?
find(1) is a command for listing files, not for removing files.
Adding a function to removing files in this way is dangerous in itself
and against "The Rule of Least Surprise".
If we really needs a function (or two?) to remove files in find,
I'd propose to implement it as a built-in command for -exec.
Here's the reason.
We could safely use "find *" to list files recursively excluding
dot-files in the current directory.
(This may not always work correctly, but it is safe, anyway.)
However, now we have -delete operator and, say, if you have
% ls -l
drwxr-xr-x 2 itohy users 512 Feb 9 12:28 #precious#
-rw-r--r-- 1 itohy users 0 Feb 9 12:28 -delete
in current directory, "find *" is expanded to
find '#precious#' -delete
and the user will have undesirable result.
If the function is implemented as, "-exec find-builtin-rm '{}' ';'",
it should be much safer.
% touch ./-exec find-builtin-rm '{}' \;
% echo *
-exec ; find-builtin-rm {}
Regards,
--
ITOH Yasufumi