From 62f0479cf106eab811e1ff5397029d665dd85b53 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Fri, 13 Apr 2007 10:00:12 +0000 Subject: find: add support for -delete, -path (by Natanael Copa) --- findutils/find.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'findutils/find.c') diff --git a/findutils/find.c b/findutils/find.c index b77d36dc3..aec22a5bc 100644 --- a/findutils/find.c +++ b/findutils/find.c @@ -79,6 +79,8 @@ USE_FEATURE_FIND_GROUP( ACTS(group, gid_t gid;)) USE_FEATURE_FIND_PAREN( ACTS(paren, action ***subexpr;)) USE_FEATURE_FIND_SIZE( ACTS(size, off_t size;)) USE_FEATURE_FIND_PRUNE( ACTS(prune)) +USE_FEATURE_FIND_DELETE(ACTS(delete)) +USE_FEATURE_FIND_PATH( ACTS(path, const char *pattern;)) static action ***actions; static bool need_print = 1; @@ -305,6 +307,28 @@ ACTF(prune) } #endif +#if ENABLE_FEATURE_FIND_DELETE +ACTF(delete) +{ + int rc; + if (S_ISDIR(statbuf->st_mode)) { + rc = rmdir(fileName); + } else { + rc = unlink(fileName); + } + if (rc < 0) + bb_perror_msg("%s", fileName); + return TRUE; +} +#endif + +#if ENABLE_FEATURE_FIND_PATH +ACTF(path) +{ + return fnmatch(ap->pattern, fileName, 0) == 0; +} +#endif + #if ENABLE_FEATURE_FIND_SIZE ACTF(size) { @@ -393,6 +417,8 @@ static action*** parse_params(char **argv) USE_FEATURE_FIND_PAREN( PARM_char_brace,) USE_FEATURE_FIND_SIZE( PARM_size ,) USE_FEATURE_FIND_PRUNE( PARM_prune ,) + USE_FEATURE_FIND_DELETE(PARM_delete ,) + USE_FEATURE_FIND_PATH( PARM_path ,) #if ENABLE_DESKTOP PARM_and , PARM_or , @@ -420,6 +446,8 @@ static action*** parse_params(char **argv) USE_FEATURE_FIND_PAREN( "(" ,) USE_FEATURE_FIND_SIZE( "-size" ,) USE_FEATURE_FIND_PRUNE( "-prune" ,) + USE_FEATURE_FIND_DELETE("-delete",) + USE_FEATURE_FIND_PATH( "-path" ,) #if ENABLE_DESKTOP "-and" , "-or" , @@ -656,6 +684,22 @@ static action*** parse_params(char **argv) (void) ALLOC_ACTION(prune); } #endif +#if ENABLE_FEATURE_FIND_DELETE + else if (parm == PARM_delete) { + need_print = 0; + recurse_flags |= ACTION_DEPTHFIRST; + (void) ALLOC_ACTION(delete); + } +#endif +#if ENABLE_FEATURE_FIND_PATH + else if (parm == PARM_path) { + action_path *ap; + if (!*++argv) + bb_error_msg_and_die(bb_msg_requires_arg, arg); + ap = ALLOC_ACTION(path); + ap->pattern = arg1; + } +#endif #if ENABLE_FEATURE_FIND_SIZE else if (parm == PARM_size) { action_size *ap; -- cgit v1.2.3