在Bash中使用一行命令以列表格式显示每个子目录的大小?


100

我想以列表格式获取目录及其大小的列表,例如执行时的方式ls -l

事实是,有一个单行命令可以做到这一点吗?我看到其他人只有很长的命令才能输出此命令。那太长了。

什么命令可以执行此操作或可以轻松键入的命令组合?du -h给它,但它显示所有子文件夹,这不是我想要的。仅当前目录文件夹。

Answers:


71

您可能想查看按大小排序的目录:

$ du -hs * | sort -hr

856M    lib
746M    share
612M    lib64
312M    src
267M    java
239M    bin
179M    sbin
173M    local
93M     i686-w64-mingw32
72M     libexec
26M     include
20M     puppet
772K    X11R6
20K     man
4.0K    games
4.0K    etc
0       tmp

如果目录中有大量条目,则此方法不起作用。bash: /run/current-system/sw/bin/du: Argument list too long
克里斯·斯特里钦斯基

123

尝试这个

du -h --max-depth=1

输出量

oliver@home:/usr$ sudo du -h --max-depth=1
24M     ./include
20M     ./sbin
228M    ./local
4.0K    ./src
520M    ./lib
8.0K    ./games
1.3G    ./share
255M    ./bin
2.4G    .

另类

如果--max-depth=1您的口味太长了,还可以尝试使用:

du -h -s *

这将使用-s--summarize),并且默认情况下只会打印文件夹本身的大小。通过传递当前工作目录(*)中的所有元素,它会产生类似的输出--max-depth=1

输出量

oliver@cloud:/usr$ sudo du -h -s *
255M    bin
8.0K    games
24M     include
520M    lib
0       lib64
228M    local
20M     sbin
1.3G    share
4.0K    src

区别是微妙的。前一种方法将显示当前工作目录的总大小以及其中包含的所有文件夹的总大小...但是最多只能显示1个深度。

后一种方法将单独计算所有通过项目的总大小。因此,它lib64在输出中包括符号链接,但不包括隐藏项(其名称以点开头)。它还缺少当前工作目录的总大小,因为它没有作为参数传递。


4
完美的答案。在Mac OSX上,--depth无法识别该参数。使用du -h -d 1了相同的结果。
迪伦


2

值得一提的是“ NCurses磁盘使用率” shell命令。

Ncdu是具有ncurses接口的磁盘使用情况分析器。它旨在在没有完整图形设置可用的远程服务器上查找太空猪,但即使在常规台式机系统上,它也是一个有用的工具。Ncdu旨在快速,简单和易于使用,并且应该能够在安装了ncurses的任何最小的POSIX类似环境中运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.