如何列出所有子目录的目录大小?

时间:2019-01-04 15:01:34

标签: linux bash shell

从外壳程序中,我需要列出所有子目录的大小。我目前正在使用:

du -hs * | sort -hr 

但是,这只会下降一级,并且不会遍历目录树。

5 个答案:

答案 0 :(得分:6)

最简单的是:

du -h --max-depth=1 parent

这将显示parent的所有子项大小。如果您还需要孙子项,则可以这样做

du -h --max-depth=2 parent

如果您要整个家庭

du -h parent

所有这些都将汇总到给定级别的每个子目录的总目录大小(最后一个除外,它将为所有子目录提供

如果您不希望子目录的内容,请添加-S标志。

答案 1 :(得分:1)

您可以使用**/*

shopt -s globstar
du -hs **/* | sort -hr
shopt -u globstar

答案 2 :(得分:1)

如果排序,您可能需要一个一致的输出,而不是以GB为单位,以MB为单位,以KB为单位...。如果我正确阅读了OP,则不会得到目录树,这就是问题,对吧?

由于-s,它没有列出子目录。拿出来(再次,如果我看错了,抱歉。)

du -b | sort -n

这会列出所有大小(以字节为单位),因此-n仅需要sort

答案 3 :(得分:0)

通配符很好,但是通配符也会列出文件,而不仅仅是目录。下面将返回所有目录的大小,仅返回目录的大小:

find . -type d -exec du -sh {} \; | sort -hr

答案 4 :(得分:0)

maxdepth功能应该可以解决您的问题,但是由于某些奇怪的原因,它似乎不起作用:

find ./ -maxdepth 1 -type d -exec du -k {} \;

也许有人可以解释为什么不考虑maxdepth