o Implement "-n" flag: ignore files and directories with user "nodump"

flag set.  Useful for calculation dump -h dump size.

PR:		bin/96864
Submitted by:	Dmitry Kazarov
Obtained from:	NetBSD (man page)
MFC after:	1 month
This commit is contained in:
Maxim Konovalov 2006-05-06 22:04:59 +00:00
parent 43e07fffb6
commit fadc7151b7
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=158339
2 changed files with 14 additions and 3 deletions

View File

@ -32,7 +32,7 @@
.\" @(#)du.1 8.2 (Berkeley) 4/1/94
.\" $FreeBSD$
.\"
.Dd June 2, 2004
.Dd May 6, 2006
.Dt DU 1
.Os
.Sh NAME
@ -44,6 +44,7 @@
.Op Fl a | s | d Ar depth
.Op Fl c
.Op Fl h | k | m
.Op Fl n
.Op Fl x
.Op Fl I Ar mask
.Op Ar
@ -95,6 +96,8 @@ Display a grand total.
Display block counts in 1024-byte (1-Kbyte) blocks.
.It Fl m
Display block counts in 1048576-byte (1-Mbyte) blocks.
.It Fl n
Ignore files and directories with user "nodump" flag (UF_NODUMP) set.
.It Fl x
File system mount points are not traversed.
.El
@ -135,6 +138,7 @@ option is not specified, the block counts will be displayed in 512-byte blocks.
.El
.Sh SEE ALSO
.Xr df 1 ,
.Xr chflags 2 ,
.Xr fts 3 ,
.Xr symlink 7 ,
.Xr quot 8

View File

@ -78,6 +78,8 @@ void ignoreadd(const char *);
void ignoreclean(void);
int ignorep(FTSENT *);
int nodumpflag = 0;
int
main(int argc, char *argv[])
{
@ -101,7 +103,7 @@ main(int argc, char *argv[])
depth = INT_MAX;
SLIST_INIT(&ignores);
while ((ch = getopt(argc, argv, "HI:LPasd:chkmrx")) != -1)
while ((ch = getopt(argc, argv, "HI:LPasd:chkmnrx")) != -1)
switch (ch) {
case 'H':
Hflag = 1;
@ -149,6 +151,9 @@ main(int argc, char *argv[])
hflag = 0;
putenv("BLOCKSIZE=1048576");
break;
case 'n':
nodumpflag = 1;
break;
case 'r': /* Compatibility. */
break;
case 'x':
@ -438,7 +443,7 @@ static void
usage(void)
{
(void)fprintf(stderr,
"usage: du [-H | -L | -P] [-a | -s | -d depth] [-c] [-h | -k | -m] [-x] [-I mask] [file ...]\n");
"usage: du [-H | -L | -P] [-a | -s | -d depth] [-c] [-h | -k | -m] [-n] [-x] [-I mask] [file ...]\n");
exit(EX_USAGE);
}
@ -474,6 +479,8 @@ ignorep(FTSENT *ent)
{
struct ignentry *ign;
if (nodumpflag && (ent->fts_statp->st_flags & UF_NODUMP))
return 1;
SLIST_FOREACH(ign, &ignores, next)
if (fnmatch(ign->mask, ent->fts_name, 0) != FNM_NOMATCH)
return 1;