是否有POSIX功能可以提供目录(包括所有子文件夹)的大小,大致相当于“du -s somepath
”?
答案 0 :(得分:26)
$ man nftw
命名强>
ftw
,nftw
- 文件树步行<强>描述强>
ftw()
遍历目录树 位于目录下 dirpath,并为每个调用fn()
一次 进入树。默认情况下, 目录在之前处理 它们包含的文件和子目录 (预订遍历)。遵守
POSIX.1-2001,SVr4,SUSv1。
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
static unsigned int total = 0;
int sum(const char *fpath, const struct stat *sb, int typeflag) {
total += sb->st_size;
return 0;
}
int main(int argc, char **argv) {
if (!argv[1] || access(argv[1], R_OK)) {
return 1;
}
if (ftw(argv[1], &sum, 1)) {
perror("ftw");
return 2;
}
printf("%s: %u\n", argv[1], total);
return 0;
}
答案 1 :(得分:2)
没有现成的功能,所以你必须自己制作。您可以查看du的GNU实现的源代码作为示例(有关要下载的位置列表,请参阅http://www.gnu.org/prep/ftp.html)。它位于coreutils
包中。
关键的Posix调用可能是opendir
,readdir
,closedir
和stat
。
答案 2 :(得分:0)
以字节为单位的结果:
du -sb | grep -oE '^\s*[0-9]+'