diff -ruN findutils.orig/find/defs.h findutils/find/defs.h --- findutils.orig/find/defs.h Sun May 20 22:39:37 2001 +++ findutils/find/defs.h Thu Feb 21 10:55:20 2002 @@ -334,6 +334,7 @@ boolean pred_cnewer PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_comma PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_ctime PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); +boolean pred_delete PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_empty PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_exec PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); boolean pred_false PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); diff -ruN findutils.orig/find/parser.c findutils/find/parser.c --- findutils.orig/find/parser.c Sun May 20 22:39:37 2001 +++ findutils/find/parser.c Thu Feb 21 11:11:26 2002 @@ -62,6 +62,7 @@ static boolean parse_comma PARAMS((char *argv[], int *arg_ptr)); static boolean parse_ctime PARAMS((char *argv[], int *arg_ptr)); static boolean parse_daystart PARAMS((char *argv[], int *arg_ptr)); +static boolean parse_delete PARAMS((char *argv[], int *arg_ptr)); static boolean parse_depth PARAMS((char *argv[], int *arg_ptr)); static boolean parse_empty PARAMS((char *argv[], int *arg_ptr)); static boolean parse_exec PARAMS((char *argv[], int *arg_ptr)); @@ -160,6 +161,7 @@ #endif {"ctime", parse_ctime}, {"daystart", parse_daystart}, /* GNU */ + {"delete",parse_delete}, /* FreeBSD */ {"depth", parse_depth}, {"empty", parse_empty}, /* GNU */ {"exec", parse_exec}, @@ -394,6 +396,22 @@ : cur_day_start % DAYSECS); full_days = true; } + return (true); +} + +static boolean +parse_delete(argv, arg_ptr) + char *argv[]; + int *arg_ptr; +{ + struct predicate *our_pred; + + our_pred = insert_primary (pred_delete); + /* -delete has the side effect of deleting. This prevents us + from doing undesired multiple deleting when the user has + already specified -delete. */ + our_pred->side_effects = true; + our_pred->need_stat = true; return (true); } diff -ruN findutils.orig/find/pred.c findutils/find/pred.c --- findutils.orig/find/pred.c Sun May 20 22:39:37 2001 +++ findutils/find/pred.c Thu Feb 21 11:00:14 2002 @@ -157,6 +157,7 @@ {pred_cnewer, "cnewer "}, {pred_comma, ", "}, {pred_ctime, "ctime "}, + {pred_delete,"delete "}, {pred_empty, "empty "}, {pred_exec, "exec "}, {pred_false, "false "}, @@ -398,6 +399,23 @@ break; } return (false); +} + +boolean +pred_delete (pathname, stat_buf, pred_ptr) + char *pathname; + struct stat *stat_buf; + struct predicate *pred_ptr; +{ + if (S_ISDIR(stat_buf->st_mode)) + { + rmdir(pathname); + } + else + { + unlink(pathname); + } + return (true); } boolean