2012-03-20 95 views
11

我试图使用find和du命名“bak”目录的大小。使用find&du获取文件夹的总大小

我这样做:find -name bak -type d -exec du -ch '{}' \;

但它返回名为每个文件夹的大小“明博”,而不是总。

无论如何得到它们?谢谢:)

+0

我建议使用'awk'来计算最终总和(不使用''-h' du') – Alex 2012-03-20 21:01:18

+0

@Alex,为什么会是首选? – 2012-03-20 21:15:31

回答

16

使用xargs(1),而不是-exec

find . -name bak -type d | xargs du -ch 

-exec执行找到的每个文件的命令(检查find(1)文档)。管道到xargs可让您汇总这些文件名并只运行du一次。你也可以这样做:

find -name bak -type d -exec du -ch '{}' \; + 

如果你的版本find支持它。

+0

它的工作原理!向我展示了文件夹的总大小。谢谢 – Piokaz 2012-03-20 21:14:39

+1

这对Ubuntu 12.04我不适用。将此建议的结果配置为awk可以工作:| awk'{sum + = $ 1} END {print sum}' – greggles 2012-12-24 22:01:03

+3

为了加快速度,您可以添加最大深度,如果您知道要查找的目录的结构:'find。 -maxdepth 3 -type d -name bak | xargs du -ch --max-depth = 0' – ajpevers 2015-05-21 07:08:15

3

尝试du -hcs。从手册页:

-s, --summarize 
     display only a total for each argument 
+0

同样的问题,使用-s或不使用。 – Piokaz 2012-03-20 21:06:52

+1

嗯,你试过了吗?find -name bak -type d -exec du -ch {} +'? – 2012-03-20 21:22:49

+0

试过,似乎我的版本的查找不支持它。 – Piokaz 2012-03-21 13:28:54

0

与find结果饲料杜:

du -shc $(find . -name bak -type d)