This patch adds the -mindepth and -maxdepth options to find(1), which
behave as in GNU find (and of course as described in the manual page diff included). I think these options would be useful for some people. Some missing $FreeBSD$ tags are also added. The patch was slightly modified (send-pr mangling of TABS). PR: bin/18941 Submitted by: Ben Smithurst <ben@scientia.demon.co.uk>
This commit is contained in:
parent
51cff74cd4
commit
95ba1f5a9c
@ -1,6 +1,7 @@
|
||||
# @(#)Makefile 8.1 (Berkeley) 6/6/93
|
||||
# $FreeBSD$
|
||||
|
||||
CFLAGS+= -Wall
|
||||
PROG= find
|
||||
SRCS= find.c function.c ls.c main.c misc.c operator.c option.c setflags.c
|
||||
.PATH: ${.CURDIR}/../../lib/libc/gen
|
||||
|
@ -80,9 +80,12 @@ PLAN *c_user __P((char *));
|
||||
PLAN *c_xdev __P((void));
|
||||
PLAN *c_openparen __P((void));
|
||||
PLAN *c_closeparen __P((void));
|
||||
PLAN *c_maxdepth __P((char *));
|
||||
PLAN *c_mindepth __P((char *));
|
||||
PLAN *c_mmin __P((char *));
|
||||
PLAN *c_mtime __P((char *));
|
||||
PLAN *c_not __P((void));
|
||||
PLAN *c_or __P((void));
|
||||
|
||||
extern int ftsoptions, isdeprecated, isdepth, isoutput, issort, isxargs;
|
||||
extern int mindepth, maxdepth;
|
||||
|
@ -245,6 +245,12 @@ will be displayed instead of the size in bytes.
|
||||
If the file is a symbolic link, the pathname of the linked\-to file will be
|
||||
displayed preceded by ``\->''.
|
||||
The format is identical to that produced by ``ls \-dgils''.
|
||||
.It Ic -maxdepth Ar n
|
||||
True if the depth of the current file into the tree is less than or equal to
|
||||
.Ar n .
|
||||
.It Ic -mindepth Ar n
|
||||
True if the depth of the current file into the tree is greater than or equal to
|
||||
.Ar n .
|
||||
.It Ic -mmin Ar n
|
||||
True if the difference between the file last modification time and the time
|
||||
.Nm find
|
||||
|
@ -35,7 +35,12 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)find.c 8.5 (Berkeley) 8/5/94";
|
||||
#else
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -206,12 +211,21 @@ find_execute(plan, paths)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (mindepth != -1 && entry->fts_level < mindepth)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Call all the functions in the execution plan until one is
|
||||
* false or all have been executed. This is where we do all
|
||||
* the work specified by the user on the command line.
|
||||
*/
|
||||
for (p = plan; p && (p->eval)(p, entry); p = p->next);
|
||||
|
||||
if (maxdepth != -1 && entry->fts_level >= maxdepth) {
|
||||
if (fts_set(tree, entry, FTS_SKIP))
|
||||
err(1, "%s", entry->fts_path);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (errno)
|
||||
err(1, "fts_read");
|
||||
|
@ -46,7 +46,7 @@ enum ntype {
|
||||
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_PRINT0, N_DELETE
|
||||
N_PRINT0, N_DELETE, N_MAXDEPTH, N_MINDEPTH
|
||||
};
|
||||
|
||||
/* node definition */
|
||||
|
@ -35,8 +35,12 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)function.c 8.10 (Berkeley) 5/4/95";
|
||||
static char rcsid[] = "$FreeBSD$";
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)function.c 8.10 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -716,6 +720,67 @@ c_ls()
|
||||
return (palloc(N_LS, f_ls));
|
||||
}
|
||||
|
||||
/*
|
||||
* -maxdepth n functions --
|
||||
*
|
||||
* Does the same as -prune if the level of the current file is greater
|
||||
* than the specified maximum depth.
|
||||
*
|
||||
* Note that -maxdepth and -mindepth are handled specially in
|
||||
* find_execute() so their f_* functions here do nothing.
|
||||
*/
|
||||
int
|
||||
f_maxdepth(plan, entry)
|
||||
PLAN *plan;
|
||||
FTSENT *entry;
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
|
||||
PLAN *
|
||||
c_maxdepth(arg)
|
||||
char *arg;
|
||||
{
|
||||
PLAN *new;
|
||||
|
||||
if (*arg == '-')
|
||||
/* all other errors handled by find_parsenum() */
|
||||
errx(1, "-maxdepth: %s: value must be positive", arg);
|
||||
|
||||
new = palloc(N_MAXDEPTH, f_maxdepth);
|
||||
maxdepth = find_parsenum(new, "-maxdepth", arg, NULL);
|
||||
return (new);
|
||||
}
|
||||
|
||||
/*
|
||||
* -mindepth n functions --
|
||||
*
|
||||
* True if the current file is at or deeper than the specified minimum
|
||||
* depth.
|
||||
*/
|
||||
int
|
||||
f_mindepth(plan, entry)
|
||||
PLAN *plan;
|
||||
FTSENT *entry;
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
|
||||
PLAN *
|
||||
c_mindepth(arg)
|
||||
char *arg;
|
||||
{
|
||||
PLAN *new;
|
||||
|
||||
if (*arg == '-')
|
||||
/* all other errors handled by find_parsenum() */
|
||||
errx(1, "-maxdepth: %s: value must be positive", arg);
|
||||
|
||||
new = palloc(N_MINDEPTH, f_mindepth);
|
||||
mindepth = find_parsenum(new, "-mindepth", arg, NULL);
|
||||
return (new);
|
||||
}
|
||||
|
||||
/*
|
||||
* -mtime n functions --
|
||||
*
|
||||
@ -1010,9 +1075,6 @@ c_flags(flags_str)
|
||||
#endif
|
||||
return new;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
|
||||
/*
|
||||
* -print functions --
|
||||
|
@ -32,7 +32,12 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)ls.c 8.1 (Berkeley) 6/6/93";
|
||||
#else
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
|
@ -41,7 +41,12 @@ char copyright[] =
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)main.c 8.4 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -67,6 +72,7 @@ int isdepth; /* do directories on post-order visit */
|
||||
int isoutput; /* user specified output operator */
|
||||
int issort; /* do hierarchies in lexicographical order */
|
||||
int isxargs; /* don't permit xargs delimiting chars */
|
||||
int mindepth = -1, maxdepth = -1; /* minimum and maximum depth */
|
||||
|
||||
static void usage __P((void));
|
||||
|
||||
|
@ -35,7 +35,12 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)misc.c 8.2 (Berkeley) 4/1/94";
|
||||
#else
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
|
@ -35,7 +35,12 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)operator.c 8.1 (Berkeley) 6/6/93";
|
||||
#else
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
|
@ -84,6 +84,8 @@ static OPTION const options[] = {
|
||||
{ "-inum", N_INUM, c_inum, O_ARGV },
|
||||
{ "-links", N_LINKS, c_links, O_ARGV },
|
||||
{ "-ls", N_LS, c_ls, O_ZERO },
|
||||
{ "-maxdepth", N_MAXDEPTH, c_maxdepth, O_ARGV },
|
||||
{ "-mindepth", N_MINDEPTH, c_mindepth, O_ARGV },
|
||||
{ "-mmin", N_MMIN, c_mmin, O_ARGV },
|
||||
{ "-mtime", N_MTIME, c_mtime, O_ARGV },
|
||||
{ "-name", N_NAME, c_name, O_ARGV },
|
||||
|
Loading…
Reference in New Issue
Block a user