On Fri, Jul 07, 2023 at 10:18:14AM +0200, Ahmad Fatoum wrote: > rm supports multiple arguments, but will stop at the first nonexistent > file and print an error message that can't be silenced. Mimic other > implementations and implement -f for silently ignoring nonexistent files. > > Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> > --- > commands/Kconfig | 3 ++- > commands/rm.c | 12 ++++++++---- > 2 files changed, 10 insertions(+), 5 deletions(-) > > diff --git a/commands/Kconfig b/commands/Kconfig > index 7ca7b56fa54e..d6db312ced42 100644 > --- a/commands/Kconfig > +++ b/commands/Kconfig > @@ -1028,10 +1028,11 @@ config CMD_RM > help > Remove files > > - Usage: rm [-r] FILES... > + Usage: rm [-rf] FILES... > > Options: > -r remove directories and their contents recursively > + -f ignore nonexistent files > > config CMD_RMDIR > tristate > diff --git a/commands/rm.c b/commands/rm.c > index be5c19222141..d23c84e0c012 100644 > --- a/commands/rm.c > +++ b/commands/rm.c > @@ -12,13 +12,16 @@ > > static int do_rm(int argc, char *argv[]) > { > - int i, opt, recursive = 0; > + int i, opt, recursive = 0, force = 0; > > - while ((opt = getopt(argc, argv, "r")) > 0) { > + while ((opt = getopt(argc, argv, "rf")) > 0) { > switch (opt) { > case 'r': > recursive = 1; > break; > + case 'f': > + force = 1; > + break; > default: > return COMMAND_ERROR_USAGE; > } > @@ -36,7 +39,7 @@ static int do_rm(int argc, char *argv[]) > ret = unlink_recursive(argv[i], NULL); > else > ret = unlink(argv[i]); > - if (ret) { > + if (ret && !force) { > printf("could not remove %s: %m\n", argv[i]); > return 1; > } To align better with standard rm this should rather be like: if (ret) { if (!force || ret != -ENOENT) printf("could not remove '%s': %m\n", argv[i]); if (!force) return 1; } Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |