Hi all,

This patch adds a '-v' option to rm(1) for more verbose output.

        $ mkdir a; touch a/b; touch c
        $ rm -rfv *
        removed 'a/b'
        removed directory 'a'
        removed 'c'

Kind regards,

Job

diff --git bin/rm/rm.1 bin/rm/rm.1
index 5c8aefaab7d..7de2c7067ee 100644
--- bin/rm/rm.1
+++ bin/rm/rm.1
@@ -95,6 +95,8 @@ that directory is skipped.
 .It Fl r
 Equivalent to
 .Fl R .
+.It Fl v
+Explain what is being done.
 .El
 .Pp
 The
diff --git bin/rm/rm.c bin/rm/rm.c
index 3242ef5f410..574609c64e9 100644
--- bin/rm/rm.c
+++ bin/rm/rm.c
@@ -50,7 +50,7 @@
 
 extern char *__progname;
 
-int dflag, eval, fflag, iflag, Pflag, stdin_ok;
+int dflag, eval, fflag, iflag, Pflag, vflag, stdin_ok;
 
 int    check(char *, char *, struct stat *);
 void   checkdot(char **);
@@ -73,7 +73,7 @@ main(int argc, char *argv[])
        int ch, rflag;
 
        Pflag = rflag = 0;
-       while ((ch = getopt(argc, argv, "dfiPRr")) != -1)
+       while ((ch = getopt(argc, argv, "dfiPRrv")) != -1)
                switch(ch) {
                case 'd':
                        dflag = 1;
@@ -93,6 +93,9 @@ main(int argc, char *argv[])
                case 'r':                       /* Compatibility. */
                        rflag = 1;
                        break;
+               case 'v':
+                       vflag = 1;
+                       break;
                default:
                        usage();
                }
@@ -201,8 +204,12 @@ rm_tree(char **argv)
                case FTS_DP:
                case FTS_DNR:
                        if (!rmdir(p->fts_accpath) ||
-                           (fflag && errno == ENOENT))
+                           (fflag && errno == ENOENT)) {
+                               if (vflag)
+                                       (void)fprintf(stdout,
+                                           "removed directory '%s'\n", 
p->fts_path);
                                continue;
+                       }
                        break;
 
                case FTS_F:
@@ -213,8 +220,12 @@ rm_tree(char **argv)
                        /* FALLTHROUGH */
                default:
                        if (!unlink(p->fts_accpath) ||
-                           (fflag && errno == ENOENT))
+                           (fflag && errno == ENOENT)) {
+                               if (vflag)
+                                       (void)fprintf(stdout,
+                                           "removed '%s'\n", p->fts_path);
                                continue;
+                       }
                }
                warn("%s", p->fts_path);
                eval = 1;
@@ -262,7 +273,8 @@ rm_file(char **argv)
                if (rval && (!fflag || errno != ENOENT)) {
                        warn("%s", f);
                        eval = 1;
-               }
+               } else if (vflag)
+                       (void)fprintf(stdout, "removed '%s'\n", f);
        }
 }
 
@@ -430,6 +442,6 @@ skip:
 void
 usage(void)
 {
-       (void)fprintf(stderr, "usage: %s [-dfiPRr] file ...\n", __progname);
+       (void)fprintf(stderr, "usage: %s [-dfiPRrv] file ...\n", __progname);
        exit(1);
 }

Reply via email to