From owner-freebsd-bugs Tue Sep 4 5:50:21 2001 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id 6D01E37B408 for ; Tue, 4 Sep 2001 05:50:01 -0700 (PDT) Received: (from gnats@localhost) by freefall.freebsd.org (8.11.4/8.11.4) id f84Co1g83211; Tue, 4 Sep 2001 05:50:01 -0700 (PDT) (envelope-from gnats) Received: from mout0.freenet.de (mout0.freenet.de [194.97.50.131]) by hub.freebsd.org (Postfix) with ESMTP id B744637B405 for ; Tue, 4 Sep 2001 05:41:44 -0700 (PDT) Received: from [194.97.50.144] (helo=mx1.freenet.de) by mout0.freenet.de with esmtp (Exim 3.32 #1) id 15eFWR-0006aH-00 for FreeBSD-gnats-submit@freebsd.org; Tue, 04 Sep 2001 14:41:43 +0200 Received: from a3122.pppool.de ([213.6.49.34]) by mx1.freenet.de with esmtp (Exim 3.32 #1) id 15eFWQ-00051E-00 for FreeBSD-gnats-submit@freebsd.org; Tue, 04 Sep 2001 14:41:42 +0200 Message-Id: Date: Tue, 4 Sep 2001 14:45:11 +0200 (CEST) From: Nils M Holm Reply-To: nmh@t3x.org To: FreeBSD-gnats-submit@freebsd.org Subject: bin/30309: New FIND(1) option Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org >Number: 30309 >Category: bin >Synopsis: New FIND(1) option >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Tue Sep 04 05:50:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Nils M Holm >Release: FreeBSD 4.2-RELEASE i386 >Organization: >Environment: FreeBSD 4.2-RELEASE >Description: I have added the -nt (newer than) option to FIND(1) which allows to search for files with at least/at most a given age. For example, find . -nt 5h30m will list files with an age of at least 5 hours and 30 minutes. I use this option for cleaning up spool directories. Man pages are updated. >How-To-Repeat: >Fix: diff -u /usr/src/usr.bin/find.old/extern.h /usr/src/usr.bin/find/extern.h --- /usr/src/usr.bin/find.old/extern.h Tue Sep 4 14:07:04 2001 +++ /usr/src/usr.bin/find/extern.h Tue Sep 4 14:09:51 2001 @@ -69,6 +69,7 @@ PLAN *c_newer __P((char *)); PLAN *c_nogroup __P((void)); PLAN *c_nouser __P((void)); +PLAN *c_nt __P((char *)); PLAN *c_path __P((char *)); PLAN *c_perm __P((char *)); PLAN *c_print __P((void)); diff -u /usr/src/usr.bin/find.old/find.1 /usr/src/usr.bin/find/find.1 --- /usr/src/usr.bin/find.old/find.1 Tue Sep 4 14:07:04 2001 +++ /usr/src/usr.bin/find/find.1 Tue Sep 4 14:32:23 2001 @@ -291,6 +291,12 @@ True if the file belongs to an unknown user. .It Ic -nogroup True if the file belongs to an unknown group. +.It Ic -nt Ar difference +True if the current file has a more recent last modification time than +the current time minus the specified difference (the file is newer than +the given amount of time). Time values may have suffixes: s=seconds, +m=minutes, h=hours, D=days, W=weeks, M=months (30D), Y=years (365D). +Suffixes may be mixed: -nt 5h30m. .It Ic -path Ar pattern True if the pathname being examined matches .Ar pattern . diff -u /usr/src/usr.bin/find.old/find.h /usr/src/usr.bin/find/find.h --- /usr/src/usr.bin/find.old/find.h Tue Sep 4 14:07:04 2001 +++ /usr/src/usr.bin/find/find.h Tue Sep 4 14:08:41 2001 @@ -44,8 +44,8 @@ N_EXEC, N_EXECDIR, N_EXPR, N_FLAGS, N_FOLLOW, N_FSTYPE, N_GROUP, N_INUM, N_LINKS, N_LS, N_MMIN, N_MTIME, N_NAME, - N_NEWER, N_NOGROUP, N_NOT, N_NOUSER, N_OK, N_OPENPAREN, N_OR, N_PATH, - N_PERM, N_PRINT, N_PRUNE, N_SIZE, N_TYPE, N_USER, N_XDEV, + N_NEWER, N_NOGROUP, N_NOT, N_NOUSER, N_NT, N_OK, N_OPENPAREN, N_OR, + N_PATH, N_PERM, N_PRINT, N_PRUNE, N_SIZE, N_TYPE, N_USER, N_XDEV, N_PRINT0, N_DELETE, N_MAXDEPTH, N_MINDEPTH }; diff -u /usr/src/usr.bin/find.old/function.c /usr/src/usr.bin/find/function.c --- /usr/src/usr.bin/find.old/function.c Tue Sep 4 14:07:04 2001 +++ /usr/src/usr.bin/find/function.c Tue Sep 4 14:26:29 2001 @@ -59,6 +59,7 @@ #include #include #include +#include #include "find.h" @@ -940,6 +941,75 @@ ftsoptions &= ~FTS_NOSTAT; return (palloc(N_NOUSER, f_nouser)); +} + +/* + * -nt diff functions -- + * + * True if the different between the current time and the file + * modification time is less than the specified difference. + */ +int +f_nt(plan, entry) + PLAN *plan; + FTSENT *entry; +{ + extern time_t now; + + return (entry->fts_statp->st_mtime > now - plan->t_data); +} + +PLAN * +c_nt(difftime) + char *difftime; +{ + PLAN *new; + time_t secs, a; + char *s; + + ftsoptions &= ~FTS_NOSTAT; + + secs = 0L; + a = 0L; + for (s = difftime; *s; s++) { + if (isdigit(*s)) { + a = a*10 + *s-'0'; + } + else if (*s == 's') { /* seconds */ + secs += a; + a = 0L; + } + else if (*s == 'm') { /* minutes */ + secs += a*60L; + a = 0L; + } + else if (*s == 'h') { /* hours */ + secs += a*3600L; + a = 0L; + } + else if (*s == 'D') { /* days */ + secs += a*86400L; + a = 0L; + } + else if (*s == 'W') { /* weeks */ + secs += a*604800L; + a = 0L; + } + else if (*s == 'M') { /* months (d*30)*/ + secs += a*2592000L; + a = 0L; + } + else if (*s == 'Y') { /* years (d*365)*/ + secs += a*31536000L; + a = 0L; + } + else { + errx(1, "-nt: bad difference: %s", difftime); + } + } + new = palloc(N_NT, f_nt); + new->t_data = secs; + return (new); } /* diff -u /usr/src/usr.bin/find.old/option.c /usr/src/usr.bin/find/option.c --- /usr/src/usr.bin/find.old/option.c Tue Sep 4 14:07:04 2001 +++ /usr/src/usr.bin/find/option.c Tue Sep 4 14:09:28 2001 @@ -92,6 +92,7 @@ { "-newer", N_NEWER, c_newer, O_ARGV }, { "-nogroup", N_NOGROUP, c_nogroup, O_ZERO }, { "-nouser", N_NOUSER, c_nouser, O_ZERO }, + { "-nt", N_NT, c_nt , O_ARGV }, { "-o", N_OR, c_or, O_ZERO }, { "-ok", N_OK, c_exec, O_ARGVP }, { "-or", N_OR, c_or, O_ZERO }, >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message