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);
}