On Fri, Jul 16, 2004 at 05:28:57PM +0300, Peter Pentchev wrote:On Fri, Jul 16, 2004 at 11:58:07AM +0400, Denis Antrushin wrote:Alfred Perlstein wrote:I'm up too late, this doesn't work because find returns success whenever it successfully runs thought everything.
Perhaps the primary change to just "-exit" which would make find exit successfully, and if the primary is never encountered (ie. our find logic never hits it) find would exit with a non-zero exit status?
Ideas? Better ideas?
The reason I want this is to avoid extracting a tarball over a directory that has files in it that are newer than the tarball.
Neither tar nor find seem to make this easy...What about this:
test -n "`find . -type f -newer ../src.tar.gz`" && echo hi
I believe Alfred's problem with this is that it will still traverse the whole hierarchy even after a match is found. In some cases, the hierarchy may be huge, and if the match is within the first 100-200 files, well... :)
I wonder if it wouldn't be a bit better to add to find(1) something like
-maxmatches N, similar to Alfred's idea, but not limited to a single
match?
Well, I've just gone ahead and implemented it: say hello to the new -maxmatch N and -minmatch N primaries:
-maxmatch n Always true; exits after printing out n matching filenames. If any -maxmatch primary is specified, it applies to the entire expression even if it would not normally be evaluated. -maxmatch 0 makes find exit immediately without performing any filesystem traversal.
-minmatch n Always true; exits with a non-zero exit code if less than n matching filenames were printed out at the end of the search. If any -minmatch primary is specified, it applies to the entire expression even if it would not normally be evaluated.
Thus, -maxmatch 1 would help in Alfred's case. Patch attached.
I don't really like this because:
a) It's global
b) It is counting printed lines, while I might want to use -exec or something else
c) It does not honour find(1)s [+-]n semantic
How about two primaries:
- -exit n, like proposed in the first post (sucess could be determined by a printed line or an -exec)
- -match n, which is true when *this* primary has been matched n times
so find [path] ... -match 1 -print -exit 0 will do the trick, while find [path] ... -match -10 -print will print the first 9 matches?
-Oliver
_______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"