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

8

从shell中,我需要列出所有子目录的大小。我目前正在使用以下命令:

du -hs * | sort -hr 

然而,这只能获取一层目录下的内容,无法遍历整个目录树。

2
du 默认情况下显示树中所有目录的大小。 -s 选项可以停止它这样做。 du -h . | sort -hr 有什么问题? - pjh
1
如何递归查找目录中存储的数量?在Bash中使用一行命令以列表格式显示每个子目录的大小?如何使用ls列出目录及其总大小?如何获取目录及其子目录的汇总大小?如何在Bash中递归列出每个文件和目录的大小并按大小降序排序?等等。 - jww
5个回答

14

最简单的是:

du -h --max-depth=1 parent

这将显示parent的所有子代大小。如果您还想要孙代,可以执行以下操作:

du -h --max-depth=2 parent

如果您希望整个家庭参与

du -h parent
所有这些只会总结每个子目录到给定级别的总目录大小(除了最后一个,它将给出所有内容)。
如果您不想要子目录的内容,请添加 -S 标志。

1
你可以使用 **/*
shopt -s globstar
du -hs **/* | sort -hr
shopt -u globstar

在使用之前,需要通过 shopt -s globstar 启用 globstar 选项。 - UtahJarhead

1
如果要排序,您可能希望输出保持一致,而不是有些是GB,有些是MB,有些是KB... 如果我正确地阅读了OP,它没有获取目录树,这是一个问题,对吗?
它没有列出子目录是因为有了-s。将其删除(如果我误读了,请再次抱歉)。
du -b | sort -n

这将列出所有以字节为单位的大小,因此您只需要在sort命令中使用-n参数。

0

通配符很好用,但它们也会列出文件而不仅仅是目录。以下命令将返回所有目录的大小,而且只有目录:

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


0

maxdepth 特性应该可以解决你的问题,但出于某种奇怪的原因,它似乎无法正常工作:

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

也许有人可以解释一下为什么没有考虑 maxdepth

因为您没有指定 -s。 - eckes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接