2013-02-19 15:34:27 +0000 2013-02-19 15:34:27 +0000
104
104

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

我想以列表的形式得到一个目录列表和它们的大小,就像你做ls -l.

问题是,有没有一个单行命令可以做到这一点?我看到别人有很长的命令,就是为了输出这个。那实在是太长了。

有什么命令可以做到这一点,或者说有什么命令的组合可以方便的输入?du -h给出了,但它显示的是所有的子文件夹,这不是我想要的,只有当前的目录文件夹。

答案 (4)

126
126
126
2013-02-19 15:36:20 +0000

试试这个

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,但不包括隐藏的项目(其名称以点开始)。它还缺少当前工作目录的总大小,因为那不是作为参数传递的。

79
79
79
2016-06-17 23:04:29 +0000

你可能想看到按大小排序的目录:

$ 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
```。
6
6
6
2014-11-06 14:52:37 +0000

打印磁盘上所有文件文件夹和隐藏文件的大小。

el@dev /home/el $ du -sh `ls -a`
258M .
265M ..
4.0K .classpath
258M .git
4.0K .gitignore
9.0K nbactions.xml
12K README
20K .README.swp
4.0K run.sh
23K XmlPostPropagate.php
3
3
3
2016-06-12 12:29:56 +0000

值得一提的是NCurses Disk Usage shell命令。

Ncdu是一个带有ncurses界面的磁盘使用分析器。它的设计是为了在远程服务器上找到空间占用者,在那里你没有一个完整的图形设置,但它是一个有用的工具,即使在普通的桌面系统上。Ncdu的目标是快速、简单和易于使用,应该可以在任何安装了ncurses的类似POSIX的最小环境中运行。