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

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

我想要以列表格式获取目录及其大小的列表,就像您执行 时所获取的一样ls -l

问题是,有没有一行命令可以做到这一点?我看到其他人有很长的命令只是为了输出这个。那太长了。

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

答案1

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

$ 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

答案2

尝试这个

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。因此,它在输出中包含符号链接,但排除隐藏项(其名称以点开头)。它还缺少当前工作目录的总大小,因为它没有作为参数传递。

答案3

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

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

答案4

值得一提的是NCurses 磁盘使用情况shell 命令。

Ncdu 是一款带有 ncurses 界面的磁盘使用情况分析器。它旨在查找远程服务器上占用大量空间的程序,而这些程序没有完整的图形设置,但它即使在常规桌面系统上也是一款有用的工具。Ncdu 的目标是快速、简单且易于使用,并且应该能够在安装了 ncurses 的任何最小 POSIX 类环境中运行。

相关内容