summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/mtree/mtree.87
-rw-r--r--usr.sbin/mtree/mtree.c7
-rw-r--r--usr.sbin/mtree/verify.c14
3 files changed, 22 insertions, 6 deletions
diff --git a/usr.sbin/mtree/mtree.8 b/usr.sbin/mtree/mtree.8
index fe93f57..ee30e84 100644
--- a/usr.sbin/mtree/mtree.8
+++ b/usr.sbin/mtree/mtree.8
@@ -40,7 +40,7 @@
.Nd map a directory hierarchy
.Sh SYNOPSIS
.Nm mtree
-.Op Fl PUcdeinrux
+.Op Fl PUcdeinqrux
.Bk -words
.Op Fl f Ar spec
.Ek
@@ -100,6 +100,11 @@ a comment is emitted before each directory and before the close of that
directory when using the
.Fl c
option.
+.It Fl q
+Quiet mode. Do not complain when a
+.Dq missing
+directory can not be created because it is already exists.
+This occurs when the directory is a symbolic link.
.It Fl r
Remove any files in the file hierarchy that are not described in the
specification.
diff --git a/usr.sbin/mtree/mtree.c b/usr.sbin/mtree/mtree.c
index aa3d1ea..d16771e 100644
--- a/usr.sbin/mtree/mtree.c
+++ b/usr.sbin/mtree/mtree.c
@@ -58,7 +58,7 @@ static const char rcsid[] =
extern long int crc_total;
int ftsoptions = FTS_LOGICAL;
-int cflag, dflag, eflag, iflag, nflag, rflag, sflag, uflag, Uflag;
+int cflag, dflag, eflag, iflag, nflag, qflag, rflag, sflag, uflag, Uflag;
u_int keys;
char fullpath[MAXPATHLEN];
@@ -112,6 +112,9 @@ main(argc, argv)
case 'p':
dir = optarg;
break;
+ case 'q':
+ qflag = 1;
+ break;
case 'P':
ftsoptions ^= FTS_LOGICAL;
ftsoptions |= FTS_PHYSICAL;
@@ -167,7 +170,7 @@ static void
usage()
{
(void)fprintf(stderr,
-"usage: mtree [-PUcdeinrux] [-f spec] [-K key] [-k key] [-p path] [-s seed]\n"
+"usage: mtree [-PUcdeinqrux] [-f spec] [-K key] [-k key] [-p path] [-s seed]\n"
"\t[-X excludes]\n");
exit(1);
}
diff --git a/usr.sbin/mtree/verify.c b/usr.sbin/mtree/verify.c
index d25797b..a599fad 100644
--- a/usr.sbin/mtree/verify.c
+++ b/usr.sbin/mtree/verify.c
@@ -53,7 +53,7 @@ static const char rcsid[] =
extern long int crc_total;
extern int ftsoptions;
-extern int dflag, eflag, rflag, sflag, uflag;
+extern int dflag, eflag, qflag, rflag, sflag, uflag;
extern char fullpath[MAXPATHLEN];
extern int lineno;
@@ -171,8 +171,16 @@ miss(p, tail)
if (p->type != F_DIR && (dflag || p->flags & F_VISIT))
continue;
(void)strcpy(tail, p->name);
- if (!(p->flags & F_VISIT))
- (void)printf("missing: %s", path);
+ if (!(p->flags & F_VISIT)) {
+ /* Don't print missing message if file exists as a
+ symbolic link and the -q flag is set. */
+ struct stat statbuf;
+
+ if (qflag && stat(path, &statbuf) == 0)
+ p->flags |= F_VISIT;
+ else
+ (void)printf("missing: %s", path);
+ }
if (p->type != F_DIR && p->type != F_LINK) {
putchar('\n');
continue;
OpenPOWER on IntegriCloud