diff options
Diffstat (limited to 'usr.sbin/mtree')
-rw-r--r-- | usr.sbin/mtree/mtree.8 | 7 | ||||
-rw-r--r-- | usr.sbin/mtree/mtree.c | 7 | ||||
-rw-r--r-- | usr.sbin/mtree/verify.c | 14 |
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; |