RFC: "-exit" option for find(1)

Denis Antrushin DAntrushin at mail.ru
Fri Jul 16 00:59:49 PDT 2004


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

:-)

> 
> * Alfred Perlstein <alfred at freebsd.org> [040716 00:15] wrote:
> 
>>This adds a primary to find(1) "-exit <arg>", it will cause
>>find to exit(2) with the <arg> as the exit status.
>>
>>Useful for finding the first instance of something:
>>
>>find . -type f -newer ../src.tar.gz -exit 0 && echo hi
>>
>>this will make find abort with a zero exit status early upon
>>finding a file newer than ../src.tar.gz.
>>
>>cvs diff: Diffing .
>>Index: extern.h
>>===================================================================
>>RCS file: /home/ncvs/src/usr.bin/find/extern.h,v
>>retrieving revision 1.21
>>diff -u -r1.21 extern.h
>>--- extern.h	28 May 2004 17:17:15 -0000	1.21
>>+++ extern.h	16 Jul 2004 07:07:50 -0000
>>@@ -58,6 +58,7 @@
>> creat_f	c_depth;
>> creat_f	c_empty;
>> creat_f	c_exec;
>>+creat_f	c_exit;
>> creat_f	c_flags;
>> creat_f	c_follow;
>> #if !defined(__NetBSD__)
>>@@ -90,6 +91,7 @@
>> exec_f	f_depth;
>> exec_f	f_empty;
>> exec_f	f_exec;
>>+exec_f	f_exit;
>> exec_f	f_expr;
>> exec_f	f_flags;
>> exec_f	f_fstype;
>>Index: find.1
>>===================================================================
>>RCS file: /home/ncvs/src/usr.bin/find/find.1,v
>>retrieving revision 1.66
>>diff -u -r1.66 find.1
>>--- find.1	7 Jul 2004 19:57:15 -0000	1.66
>>+++ find.1	16 Jul 2004 07:12:58 -0000
>>@@ -372,6 +372,10 @@
>> .Ar flags
>> bits match those of
>> .Ar notflags .
>>+.It Ic -exit Ar exitstatus
>>+This primary will cause the find program to exit immediately with an exit
>>+status of
>>+.Ar exitstatus .
>> .It Ic -fstype Ar type
>> True if the file is contained in a file system of type
>> .Ar type .
>>Index: function.c
>>===================================================================
>>RCS file: /home/ncvs/src/usr.bin/find/function.c,v
>>retrieving revision 1.50
>>diff -u -r1.50 function.c
>>--- function.c	28 May 2004 17:17:15 -0000	1.50
>>+++ function.c	16 Jul 2004 07:07:05 -0000
>>@@ -748,6 +748,25 @@
>> }
>> 
>> int
>>+f_exit(PLAN *plan, FTSENT *entry)
>>+{
>>+
>>+	exit(plan->flags);
>>+}
>>+
>>+PLAN *
>>+c_exit(OPTION *option, char ***argvp)
>>+{
>>+	PLAN *new;
>>+	int ex;
>>+
>>+	ex = atoi(nextarg(option, argvp));
>>+	new = palloc(option);
>>+	new->flags = ex;
>>+	return (new);
>>+}
>>+
>>+int
>> f_flags(PLAN *plan, FTSENT *entry)
>> {
>> 	u_long flags;
>>Index: option.c
>>===================================================================
>>RCS file: /home/ncvs/src/usr.bin/find/option.c,v
>>retrieving revision 1.22
>>diff -u -r1.22 option.c
>>--- option.c	28 May 2004 17:17:15 -0000	1.22
>>+++ option.c	16 Jul 2004 07:06:49 -0000
>>@@ -76,6 +76,7 @@
>> 	{ "-empty",	c_empty,	f_empty,	0 },
>> 	{ "-exec",	c_exec,		f_exec,		0 },
>> 	{ "-execdir",	c_exec,		f_exec,		F_EXECDIR },
>>+	{ "-exit",	c_exit,		f_exit,		0 },
>> 	{ "-false",	c_simple,	f_not,		0 },
>> 	{ "-flags",	c_flags,	f_flags,	0 },
>> 	{ "-follow",	c_follow,	f_always_true,	0 },
>>-- 
>>- Alfred Perlstein
>>- Research Engineering Development Inc.
>>- email: bright at mu.org cell: 408-480-4684
> 
> 



More information about the freebsd-hackers mailing list