bug-findutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: find -delete .. Do What I Mean?


From: Eric Blake
Subject: Re: find -delete .. Do What I Mean?
Date: Fri, 07 Sep 2007 07:16:53 -0600
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070728 Thunderbird/2.0.0.6 Mnenhy/0.7.5.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Matthijs De Smedt on 9/7/2007 6:15 AM:
> 
> I've just read the manpage, and I'm still trying to find some text
> explaining the importance of the order of expression elements. I now sort-of
> understand the syntax, but it's very unusual when I'm used to syntax like
> "emerge --unmerge --pretend --verbose package".

Find is required, by POSIX, to avoid reordering expressions once it
encounters a directory name or start of an expression.  Argument
reordering does not make sense in light of expressions.

> Maybe something can be added under "Expressions" explaining exactly how find
> interprets expressions.

Where do you propose adding it?  There is already information there - for
each file name being visited, find evaluates the expression from left to
right until it hits something that evaluates to false.  -delete evaluates
to true if it successfully deletes anything, so by listing it first, you
are asking find to delete a file, and if it fails, then do the next part
of the expression (which finally does name filtering).  Usually, you want
to do the filtering first (for example, -iname returns false if the file
name does not match the pattern), then only -delete what is left.  Maybe
what we should add is a sentence to -delete:

Note that -delete is usually placed at the end of an expression, after all
earlier tests have filtered the list of which files to delete.

> ps. Why is "find -iname *-1*.jpg" invalid? I didn't explicitly indicate the
> path to search so find assumes the working directory.

Because you did not protect it from filename expansion by the shell.  If
your current directory happens to have a single file that matches that
pattern, then you are really invoking "find -iname myfile-1.jpg", which
does not find everything based on the pattern.  And if your current
directory happens to have two or more files that match the pattern, you
have just given find a syntax error, since in "find -iname f1-1.jpg
f2-1.jpg", f2-1.jpg falls in the position of an expected expression, but
does not match any known expression.  You probably meant:

find -iname "*-1*.jpg"

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFG4U9F84KuGfSFAYARAsK6AKCsVVcqY9MXikDeSYGWKY6MmRGvegCgnGjJ
qRfh/AfG2H6ieEiFUJe4D7k=
=xk7P
-----END PGP SIGNATURE-----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]