Add a -t switch for masking output that's above or below certain thresholds.
This switch makes it a lot easier to locate problem areas when a process is threatening to consume all of your disk space. PR: 144192 Submitted by: gk MFC after: 3 weeks
This commit is contained in:
parent
7100efb738
commit
f0cc075c4f
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=209362
@ -42,7 +42,7 @@
|
|||||||
.Nm
|
.Nm
|
||||||
.Op Fl A
|
.Op Fl A
|
||||||
.Op Fl H | L | P
|
.Op Fl H | L | P
|
||||||
.Op Fl a | s | d Ar depth
|
.Op Fl a | s | d Ar depth | Fl t Ar threshold
|
||||||
.Op Fl c
|
.Op Fl c
|
||||||
.Op Fl l
|
.Op Fl l
|
||||||
.Op Fl h | k | m | B Ar blocksize
|
.Op Fl h | k | m | B Ar blocksize
|
||||||
@ -107,6 +107,14 @@ This option exists solely for conformance with
|
|||||||
Display an entry for each specified file.
|
Display an entry for each specified file.
|
||||||
(Equivalent to
|
(Equivalent to
|
||||||
.Fl d Li 0 )
|
.Fl d Li 0 )
|
||||||
|
.It Fl t Ar threshold
|
||||||
|
Display only entries for which size exceeds
|
||||||
|
.Ar threshold .
|
||||||
|
If
|
||||||
|
.Ar threshold
|
||||||
|
is negative, display only entries for which size is less than the absolute
|
||||||
|
value of
|
||||||
|
.Ar threshold .
|
||||||
.It Fl d Ar depth
|
.It Fl d Ar depth
|
||||||
Display an entry for all files and directories
|
Display an entry for all files and directories
|
||||||
.Ar depth
|
.Ar depth
|
||||||
|
@ -90,6 +90,7 @@ main(int argc, char *argv[])
|
|||||||
FTS *fts;
|
FTS *fts;
|
||||||
FTSENT *p;
|
FTSENT *p;
|
||||||
off_t savednumber, curblocks;
|
off_t savednumber, curblocks;
|
||||||
|
off_t threshold, threshold_sign;
|
||||||
int ftsoptions;
|
int ftsoptions;
|
||||||
int listall;
|
int listall;
|
||||||
int depth;
|
int depth;
|
||||||
@ -106,12 +107,14 @@ main(int argc, char *argv[])
|
|||||||
save = argv;
|
save = argv;
|
||||||
ftsoptions = 0;
|
ftsoptions = 0;
|
||||||
savednumber = 0;
|
savednumber = 0;
|
||||||
|
threshold = 0;
|
||||||
|
threshold_sign = 1;
|
||||||
cblocksize = DEV_BSIZE;
|
cblocksize = DEV_BSIZE;
|
||||||
blocksize = 0;
|
blocksize = 0;
|
||||||
depth = INT_MAX;
|
depth = INT_MAX;
|
||||||
SLIST_INIT(&ignores);
|
SLIST_INIT(&ignores);
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "AB:HI:LPasd:chklmnrx")) != -1)
|
while ((ch = getopt(argc, argv, "AB:HI:LPasd:chklmnrt:x")) != -1)
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'A':
|
case 'A':
|
||||||
Aflag = 1;
|
Aflag = 1;
|
||||||
@ -179,6 +182,14 @@ main(int argc, char *argv[])
|
|||||||
break;
|
break;
|
||||||
case 'r': /* Compatibility. */
|
case 'r': /* Compatibility. */
|
||||||
break;
|
break;
|
||||||
|
case 't' :
|
||||||
|
if (expand_number(optarg, &threshold) != 0 ||
|
||||||
|
threshold == 0) {
|
||||||
|
warnx("invalid threshold: %s", optarg);
|
||||||
|
usage();
|
||||||
|
} else if (threshold < 0)
|
||||||
|
threshold_sign = -1;
|
||||||
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
ftsoptions |= FTS_XDEV;
|
ftsoptions |= FTS_XDEV;
|
||||||
break;
|
break;
|
||||||
@ -248,6 +259,10 @@ main(int argc, char *argv[])
|
|||||||
blocksize /= DEV_BSIZE;
|
blocksize /= DEV_BSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (threshold != 0)
|
||||||
|
threshold = howmany(threshold / DEV_BSIZE * cblocksize,
|
||||||
|
blocksize);
|
||||||
|
|
||||||
rval = 0;
|
rval = 0;
|
||||||
|
|
||||||
(void)signal(SIGINFO, siginfo);
|
(void)signal(SIGINFO, siginfo);
|
||||||
@ -271,7 +286,9 @@ main(int argc, char *argv[])
|
|||||||
p->fts_parent->fts_bignum += p->fts_bignum +=
|
p->fts_parent->fts_bignum += p->fts_bignum +=
|
||||||
curblocks;
|
curblocks;
|
||||||
|
|
||||||
if (p->fts_level <= depth) {
|
if (p->fts_level <= depth && threshold <=
|
||||||
|
threshold_sign * howmany(p->fts_bignum *
|
||||||
|
cblocksize, blocksize)) {
|
||||||
if (hflag) {
|
if (hflag) {
|
||||||
prthumanval(p->fts_bignum);
|
prthumanval(p->fts_bignum);
|
||||||
(void)printf("\t%s\n", p->fts_path);
|
(void)printf("\t%s\n", p->fts_path);
|
||||||
|
Loading…
Reference in New Issue
Block a user