Add -Btime, -Bnewer, -Bmin, -newerB[Bacmt], -newer[acmt]B options to

work with the st_birthtime field of struct stat.

'B' has been chosen to match the format specifier from stat(1).

Approved by:	jhb
MFC after:	2 weeks
This commit is contained in:
Ceri Davies 2006-04-03 20:36:37 +00:00
parent 95529bcb14
commit 31d534254e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=157440
4 changed files with 59 additions and 4 deletions

View File

@ -174,6 +174,35 @@ primary.
.El
.Sh PRIMARIES
.Bl -tag -width indent
.It Ic -Bmin Ar n
True if the difference between the time of a file's inode creation
and the time
.Nm
was started, rounded up to the next full minute, is
.Ar n
minutes.
.It Ic -Bnewer Ar file
Same as
.Ic -newerBm .
.It Ic -Btime Ar n Ns Op Cm smhdw
If no units are specified, this primary evaluates to
true if the difference between the time of a file's inode creation
and the time
.Nm
was started, rounded up to the next full 24-hour period, is
.Ar n
24-hour periods.
.Pp
If units are specified, this primary evaluates to
true if the difference between the time of last change of file status
information and the time
.Nm
was started is exactly
.Ar n
units.
Please refer to the
.Ic -atime
primary description for information on supported time units.
.It Ic -acl
May be used in conjunction with other options to locate
files with extended ACLs.
@ -497,12 +526,16 @@ True if the current file has a more recent last modification time than
.It Ic -newer Ns Ar X Ns Ar Y Ar file
True if the current file has a more recent last access time
.Ar ( X Ns = Ns Cm a ) ,
inode creation time
.Ar ( X Ns = Ns Cm B ) ,
change time
.Ar ( X Ns = Ns Cm c ) ,
or modification time
.Ar ( X Ns = Ns Cm m )
than the last access time
.Ar ( Y Ns = Ns Cm a ) ,
inode creation time
.Ar ( Y Ns = Ns Cm B ) ,
change time
.Ar ( Y Ns = Ns Cm c ) ,
or modification time

View File

@ -72,6 +72,8 @@ typedef struct _plandata *creat_f(struct _option *, char ***);
#define F_IGNCASE 0x00010000 /* iname ipath iregex */
#define F_EXACTTIME F_IGNCASE /* -[acm]time units syntax */
#define F_EXECPLUS 0x00020000 /* -exec ... {} + */
#define F_TIME_B 0x00040000 /* one of -Btime, -Bnewer, -newerB* */
#define F_TIME2_B 0x00080000 /* one of -newer?B */
/* node definition */
typedef struct _plandata {

View File

@ -234,10 +234,10 @@ nextarg(OPTION *option, char ***argvp)
} /* nextarg() */
/*
* The value of n for the inode times (atime, ctime, and mtime) is a range,
* i.e. n matches from (n - 1) to n 24 hour periods. This interacts with
* -n, such that "-mtime -1" would be less than 0 days, which isn't what the
* user wanted. Correct so that -1 is "less than 1".
* The value of n for the inode times (atime, birthtime, ctime, mtime) is a
* range, i.e. n matches from (n - 1) to n 24 hour periods. This interacts
* with -n, such that "-mtime -1" would be less than 0 days, which isn't what
* the user wanted. Correct so that -1 is "less than 1".
*/
#define TIME_CORRECT(p) \
if (((p)->flags & F_ELG_MASK) == F_LESSTHAN) \
@ -248,6 +248,7 @@ nextarg(OPTION *option, char ***argvp)
*
* True if the difference between the
* file access time (-amin)
* file birth time (-Bmin)
* last change of file status information (-cmin)
* file modification time (-mmin)
* and the current time is n min periods.
@ -261,6 +262,9 @@ f_Xmin(PLAN *plan, FTSENT *entry)
} else if (plan->flags & F_TIME_A) {
COMPARE((now - entry->fts_statp->st_atime +
60 - 1) / 60, plan->t_data);
} else if (plan->flags & F_TIME_B) {
COMPARE((now - entry->fts_statp->st_birthtime +
60 - 1) / 60, plan->t_data);
} else {
COMPARE((now - entry->fts_statp->st_mtime +
60 - 1) / 60, plan->t_data);
@ -287,6 +291,7 @@ c_Xmin(OPTION *option, char ***argvp)
*
* True if the difference between the
* file access time (-atime)
* file birth time (-Btime)
* last change of file status information (-ctime)
* file modification time (-mtime)
* and the current time is n 24 hour periods.
@ -299,6 +304,8 @@ f_Xtime(PLAN *plan, FTSENT *entry)
if (plan->flags & F_TIME_A)
xtime = entry->fts_statp->st_atime;
else if (plan->flags & F_TIME_B)
xtime = entry->fts_statp->st_birthtime;
else if (plan->flags & F_TIME_C)
xtime = entry->fts_statp->st_ctime;
else
@ -1065,6 +1072,8 @@ f_newer(PLAN *plan, FTSENT *entry)
return entry->fts_statp->st_ctime > plan->t_data;
else if (plan->flags & F_TIME_A)
return entry->fts_statp->st_atime > plan->t_data;
else if (plan->flags & F_TIME_B)
return entry->fts_statp->st_birthtime > plan->t_data;
else
return entry->fts_statp->st_mtime > plan->t_data;
}

View File

@ -68,6 +68,9 @@ static OPTION const options[] = {
{ "-and", c_and, NULL, 0 },
{ "-anewer", c_newer, f_newer, F_TIME_A },
{ "-atime", c_Xtime, f_Xtime, F_TIME_A },
{ "-Bmin", c_Xmin, f_Xmin, F_TIME_B },
{ "-Bnewer", c_newer, f_newer, F_TIME_B },
{ "-Btime", c_Xtime, f_Xtime, F_TIME_B },
{ "-cmin", c_Xmin, f_Xmin, F_TIME_C },
{ "-cnewer", c_newer, f_newer, F_TIME_C },
{ "-ctime", c_Xtime, f_Xtime, F_TIME_C },
@ -95,14 +98,22 @@ static OPTION const options[] = {
{ "-name", c_name, f_name, 0 },
{ "-newer", c_newer, f_newer, 0 },
{ "-neweraa", c_newer, f_newer, F_TIME_A | F_TIME2_A },
{ "-neweraB", c_newer, f_newer, F_TIME_A | F_TIME2_B },
{ "-newerac", c_newer, f_newer, F_TIME_A | F_TIME2_C },
{ "-neweram", c_newer, f_newer, F_TIME_A },
{ "-newerat", c_newer, f_newer, F_TIME_A | F_TIME2_T },
{ "-newerBa", c_newer, f_newer, F_TIME_B | F_TIME2_A },
{ "-newerBB", c_newer, f_newer, F_TIME_B | F_TIME2_B },
{ "-newerBc", c_newer, f_newer, F_TIME_B | F_TIME2_C },
{ "-newerBm", c_newer, f_newer, F_TIME_B },
{ "-newerBt", c_newer, f_newer, F_TIME_B | F_TIME2_T },
{ "-newerca", c_newer, f_newer, F_TIME_C | F_TIME2_A },
{ "-newercB", c_newer, f_newer, F_TIME_C | F_TIME2_B },
{ "-newercc", c_newer, f_newer, F_TIME_C | F_TIME2_C },
{ "-newercm", c_newer, f_newer, F_TIME_C },
{ "-newerct", c_newer, f_newer, F_TIME_C | F_TIME2_T },
{ "-newerma", c_newer, f_newer, F_TIME2_A },
{ "-newermB", c_newer, f_newer, F_TIME2_B },
{ "-newermc", c_newer, f_newer, F_TIME2_C },
{ "-newermm", c_newer, f_newer, 0 },
{ "-newermt", c_newer, f_newer, F_TIME2_T },