递归查找目录的大小并获得总计

递归查找目录的大小并获得总计

我正在使用此命令来查找所需的文件夹并计算大小。

find . -type d -name 'tmp_c*' | xargs du -hcs {} \; + 

我的 find 版本不支持 -exec。但是,这个可以工作。但是我不确定它是否给出了包含我的搜索字符串的目录的正确总数。当我运行命令并连接到 less 时,我看到它计算每个文件夹的大小,然后不时地输出总数。像这样:

140K    ./r/g/userid/attach/tmp_c_241091464_2
68K     ./r/g/userid/attach/tmp_c_58367014_undefined
2.3G    total

如果我将输出重定向到一个文件,然后 grep 总计,我会得到以下结果:

2.3G    total
978M    total
1.1G    total
2.0G    total
1.1G    total

思考这给了我正确的数字。但是,我如何才能更进一步地执行此命令,并使其在一行上汇总总计?

答案1

find . -type d -name 'tmp_c*' -print0 | du -hcs --files0-from -

这假设(足够新?)GNU 版本的finddu

答案2

这应该可以工作,在我的 EL4 盒子上测试过...这是我拥有的最旧的盒子,让我感到畏缩,我不知道你如何使用 EL3。

find . -type d -name 'tmp_c*' -print0|xargs -0 du -c|tail -1

完成了coreutils-4.5.3-26

答案3

https://stackoverflow.com/a/1323769/799204

一种替代解决方案是使用 awk:

但脚本必须针对这种情况进行调整,请尝试

find . -type d -name 'tmp_c*' -print0 | xargs -0 du -s | awk 'BEGIN { sum=0 } { sum+=$1 } END { print sum }'

输出将以十进制形式显示

答案4

我检查了 epel 从 5 开始,而不是 3,所以唯一的选择是自定义脚本。

也可以安装 ncdu;

https://dev.yorhel.nl/ncduit

我一直在使用它,比任何自定义 bash 更容易、更快。 (可以浏览目录,节省大量时间)。

相关内容