Bash 如何使用find和du获取文件夹的总大小?
我正在尝试使用find和du获取名为“bak”的目录的大小 我这样做: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-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=-