PR/22405 -- extend du(1) to report inode usage. Patch provided by
Jonathan Perkin. OK by wiz@
This commit is contained in:
parent
7a488c1ecf
commit
575f4d696a
|
@ -1,4 +1,4 @@
|
|||
.\" $NetBSD: du.1,v 1.21 2006/09/24 07:19:16 wiz Exp $
|
||||
.\" $NetBSD: du.1,v 1.22 2012/03/11 11:23:20 shattered Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1990, 1993
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
|
@ -29,7 +29,7 @@
|
|||
.\"
|
||||
.\" @(#)du.1 8.2 (Berkeley) 4/1/94
|
||||
.\"
|
||||
.Dd September 24, 2006
|
||||
.Dd March 4, 2012
|
||||
.Dt DU 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -39,12 +39,12 @@
|
|||
.Nm
|
||||
.Op Fl H | Fl L | Fl P
|
||||
.Op Fl a | Fl d Ar depth | Fl s
|
||||
.Op Fl cghkmnrx
|
||||
.Op Fl cghikmnrx
|
||||
.Op Ar file ...
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
utility displays the file system block usage for each file argument
|
||||
utility displays the file system usage for each file argument
|
||||
and for each directory in the file hierarchy rooted in each directory
|
||||
argument.
|
||||
If no file is specified, the block usage of the hierarchy rooted in
|
||||
|
@ -79,6 +79,9 @@ flag is specified, the numbers will be displayed in "human-readable"
|
|||
format.
|
||||
Use unit suffixes: B (Byte), K (Kilobyte), M (Megabyte), G (Gigabyte),
|
||||
T (Terabyte) and P (Petabyte).
|
||||
.It Fl i
|
||||
Output inode usage instead of blocks.
|
||||
All "human-readable" options are ignored.
|
||||
.It Fl k
|
||||
By default,
|
||||
.Nm
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: du.c,v 1.35 2011/09/01 13:37:33 joerg Exp $ */
|
||||
/* $NetBSD: du.c,v 1.36 2012/03/11 11:23:20 shattered Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1989, 1993, 1994
|
||||
|
@ -42,7 +42,7 @@ __COPYRIGHT("@(#) Copyright (c) 1989, 1993, 1994\
|
|||
#if 0
|
||||
static char sccsid[] = "@(#)du.c 8.5 (Berkeley) 5/4/95";
|
||||
#else
|
||||
__RCSID("$NetBSD: du.c,v 1.35 2011/09/01 13:37:33 joerg Exp $");
|
||||
__RCSID("$NetBSD: du.c,v 1.36 2012/03/11 11:23:20 shattered Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
|
@ -54,6 +54,7 @@ __RCSID("$NetBSD: du.c,v 1.35 2011/09/01 13:37:33 joerg Exp $");
|
|||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <fts.h>
|
||||
#include <inttypes.h>
|
||||
#include <util.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -61,11 +62,14 @@ __RCSID("$NetBSD: du.c,v 1.35 2011/09/01 13:37:33 joerg Exp $");
|
|||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
|
||||
/* Count inodes or file size */
|
||||
#define COUNT (iflag ? 1 : p->fts_statp->st_blocks)
|
||||
|
||||
static int linkchk(dev_t, ino_t);
|
||||
static void prstat(const char *, int64_t);
|
||||
__dead static void usage(void);
|
||||
|
||||
static int hflag;
|
||||
static int hflag, iflag;
|
||||
static long blocksize;
|
||||
|
||||
int
|
||||
|
@ -83,7 +87,7 @@ main(int argc, char *argv[])
|
|||
totalblocks = 0;
|
||||
ftsoptions = FTS_PHYSICAL;
|
||||
depth = INT_MAX;
|
||||
while ((ch = getopt(argc, argv, "HLPacd:ghkmnrsx")) != -1)
|
||||
while ((ch = getopt(argc, argv, "HLPacd:ghikmnrsx")) != -1)
|
||||
switch (ch) {
|
||||
case 'H':
|
||||
Hflag = 1;
|
||||
|
@ -118,6 +122,9 @@ main(int argc, char *argv[])
|
|||
case 'h':
|
||||
hflag = 1;
|
||||
break;
|
||||
case 'i':
|
||||
iflag = 1;
|
||||
break;
|
||||
case 'k':
|
||||
blocksize = 1024;
|
||||
gkmflag = 1;
|
||||
|
@ -206,9 +213,9 @@ main(int argc, char *argv[])
|
|||
break;
|
||||
case FTS_DP:
|
||||
p->fts_parent->fts_number +=
|
||||
p->fts_number += p->fts_statp->st_blocks;
|
||||
p->fts_number += COUNT;
|
||||
if (cflag)
|
||||
totalblocks += p->fts_statp->st_blocks;
|
||||
totalblocks += COUNT;
|
||||
/*
|
||||
* If listing each directory, or not listing files
|
||||
* or directories and this is post-order of the
|
||||
|
@ -235,10 +242,10 @@ main(int argc, char *argv[])
|
|||
* the root of a traversal, display the total.
|
||||
*/
|
||||
if (listfiles || !p->fts_level)
|
||||
prstat(p->fts_path, p->fts_statp->st_blocks);
|
||||
p->fts_parent->fts_number += p->fts_statp->st_blocks;
|
||||
prstat(p->fts_path, COUNT);
|
||||
p->fts_parent->fts_number += COUNT;
|
||||
if (cflag)
|
||||
totalblocks += p->fts_statp->st_blocks;
|
||||
totalblocks += COUNT;
|
||||
}
|
||||
}
|
||||
if (errno)
|
||||
|
@ -251,6 +258,11 @@ main(int argc, char *argv[])
|
|||
static void
|
||||
prstat(const char *fname, int64_t blocks)
|
||||
{
|
||||
if (iflag) {
|
||||
(void)printf("%" PRId64 "\t%s\n", blocks, fname);
|
||||
return;
|
||||
}
|
||||
|
||||
if (hflag) {
|
||||
char buf[5];
|
||||
int64_t sz = blocks * 512;
|
||||
|
@ -260,8 +272,8 @@ prstat(const char *fname, int64_t blocks)
|
|||
|
||||
(void)printf("%s\t%s\n", buf, fname);
|
||||
} else
|
||||
(void)printf("%lld\t%s\n",
|
||||
(long long)howmany(blocks, (int64_t)blocksize),
|
||||
(void)printf("%" PRId64 "\t%s\n",
|
||||
howmany(blocks, (int64_t)blocksize),
|
||||
fname);
|
||||
}
|
||||
|
||||
|
@ -345,6 +357,6 @@ usage(void)
|
|||
{
|
||||
|
||||
(void)fprintf(stderr,
|
||||
"usage: du [-H | -L | -P] [-a | -d depth | -s] [-cghkmnrx] [file ...]\n");
|
||||
"usage: du [-H | -L | -P] [-a | -d depth | -s] [-cghikmnrx] [file ...]\n");
|
||||
exit(1);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue