Bash 如何使用find和du获取文件夹的总大小?

Bash 如何使用find和du获取文件夹的总大小?,bash,shell,debian,Bash,Shell,Debian,我正在尝试使用find和du获取名为“bak”的目录的大小 我这样做:find-name bak-type d-exec du-ch'{}\ 但它返回每个名为“bak”的文件夹的大小,而不是总数 不管怎么说,你想得到它们吗?谢谢:)试试du-hcs。从手册页: -s, --summarize display only a total for each argument 使用而不是-exec: find . -name bak -type d | xargs du -ch -ex

我正在尝试使用find和du获取名为“bak”的目录的大小

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

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


不管怎么说,你想得到它们吗?谢谢:)

试试
du-hcs
。从手册页:

 -s, --summarize
      display only a total for each argument
使用而不是
-exec

find . -name bak -type d | xargs du -ch
-exec
为找到的每个文件执行命令(检查文档)。通过管道传输到
xargs
可以聚合这些文件名,并且只运行
du
一次。你也可以这样做:

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

如果您的
find
版本支持它。

将find的结果提供给du:

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

如果有许多文件,请使用
-exec+可能被执行,您将得到多个小计

另一种方法是管道查找的结果:

find . -name bak -type d -print0 | du -ch --files0-from=-

我建议使用
awk
来计算结束和(使用
du
而不使用
-h
)@Alex,为什么会这样呢?同样的问题,使用-s还是不使用.Hmm,你是否尝试过
find-name bak-type d-exec du-ch{/code>?尝试过,我的find版本似乎不支持它。这在Ubuntu 12.04上对我不起作用。将此建议的结果传递给awk确实有效:|awk'{sum+=$1}END{print sum}要加快速度,如果您知道要查找的目录结构,可以添加最大深度:
find-maxdepth 3-typed-name bak | xargs du-ch--max depth=0
我认为这个答案是原始问题的最简单解决方案。通过在管道中使用
tr
grep
,它变得更加通用:
find-命名bak | grep-v'不是这个'| grep-v'不是那个'| tr“\n”“\0”| du-hcs--files0 from=-