假设我要获取Linux文件系统每个目录的大小。当我使用ls -la时,我并没有真正获得文件夹的摘要大小。

如果我使用df,我会得到每个已挂载文件系统的大小,但这也无济于事。使用du,我可以获得每个子目录的大小以及整个文件系统的摘要。

但是我只希望在文件系统的ROOT文件夹中具有每个目录的摘要大小。有什么命令可以实现吗?

评论

--total标志对我很有帮助。例如。 du -sh-总应用程序/ *。 askubuntu.com/a/465436/48214

#1 楼

这符合您的需求:

du -sh /*


这意味着什么:



每个命令行参数的总数。

-s用于可读的后缀,例如-h表示兆字节,M表示千兆字节(可选)。

G只是扩展到所有目录(并且文件)在/*中。

注意:不包括点文件;运行/也可以包含这些内容。


还有用的是按大小排序: br />

shopt -s dotglob确保-h正确解释了人类可读的后缀。


评论


如果根目录中有点目录,则可以使用shopt -s dotglob将它们包括在计数中。

– Philipp
2010年7月11日在21:55

这非常有用,因为它很简单,您可以放置​​所需的路径而不是/ *,例如./用于当前目录,或./*用于当前目录中的每个项目。

– psur
2012年8月9日下午6:22

@psur或您可以使用./*/仅获得子文件夹,而不是所有项目

– relascope
16年1月28日在23:48

排序版本:du -sh / * |排序-h

–武安市
17年7月28日在3:24



@ c1phr如果您的排序没有-h,则还需要将其与du分开,否则排序将混合成千/兆/千兆字节。 du -s / * |排序-nr。

–托马斯
18年8月20日在12:30

#2 楼

我经常需要查找最大的目录,因此要获得包含20个最大目录的排序列表,请执行以下操作:

du -m /some/path | sort -nr | head -n 20


在这种情况下,大小将在兆字节。

评论


这是一种使它更具可读性的方法du -sh / some / path | -hr |头-n 20

–十六进制
13年7月8日在15:49



@Xedecima使用h的问题是排序不知道如何处理不同的大小。例如,将268K排序为高于255M,而将两者都排序为高于2.7G。

–克里斯安
2013年12月27日在18:33

“ sort”命令上的-h(人类可读)参数应正确读取这些值。就像du的-h标志导出它们一样。我猜取决于您的运行情况。

–十六进制
14年4月14日在18:02

在Ubuntu 16.04中工作。不错的提示。

– SDsolar
18 Mar 4 '18 at 17:15

sudo du -haxt 1G / | -hr |头-30

–异常
18-10-5在10:03

#3 楼

我喜欢为此使用Ncdu,您可以使用光标来导航和向下钻取它确实运行良好的目录结构。

评论


太棒了关键字:du met ncurses。您可以使用b放入目录中的shell。

– Ciro Santilli郝海东冠状病六四事件法轮功
19年1月31日在15:28

#4 楼

现有的答案非常有帮助,也许某些初学者(例如我)也会发现此帮助。其他一些与尺寸有关的操作:

for each in $(ls) ; do du -hs "$each" ; done



与第一个答案非常相似,结果与1.几乎相同,但花了我一些时间如果在子目录中,则了解*与./*的区别:

du -sh ./*




评论


对于每个都不起作用,因为它将控制台字符(例如\ 033 [)追加到文件夹列表中)

–machineaddict
19年2月6日,11:57



@machineaddict不确定您的意思。我一直都用这个,对我来说很好。

–马丁
19年2月6日在12:57

尝试从每个命令开始运行命令。不起作用

–machineaddict
19年2月6日在14:34

我完全按照此处的命令运行命令。从每个开始。作品。

–马丁
19年2月7日在14:29

#5 楼

以下du调用应在BSD系统上起作用:

du -d 1 /


评论


我的du(Ubuntu 10.4)没有-d选项。您在什么系统上?

–托马斯
2010年7月11日在17:30

在我的openSUSE上也没有-d选项:(

– 2ndkauboy
2010年7月11日17:33

好的,那只是BSD选项(我在OS X上)。

– Philipp
2010年7月11日在17:37

BSD / * NIX上的正确便携式选项组合为du -sk / *。我非常讨厌-k东西。 Linux'-h简直就是一团糟。

– Dummy00001
2010年7月11日在19:46

在其他系统中,其--max-depth

– Vishnu Kumar
2015年9月1日12:49在

#6 楼

这不容易。 du命令要么显示文件和文件夹(默认),要么仅显示您在命令行上指定的所有项目的大小(选项-s)。

要获取最大的项目(文件和文件夹),请排序,在Linux上具有人类可读的大小:

du -h | sort -h


这会将您埋藏在大量小文件中。您可以使用--threshold(在我的示例中为1 MB)摆脱它们:

du --threshold=1M -h | sort -h


该命令的优点是它包括隐藏的点文件夹(以.)。

如果您只想使用文件夹,则需要使用find,但这可能会非常非常慢,因为du必须多次扫描许多文件夹:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h


评论


--threshold ^^^此选项在Linux上不可用

– podarok
2015年10月6日,12:30

@podarok在OpenSUSE 13.2 Linux上可用。尝试查找发行版的最新版本,或者自己编译软件包的最新版本。

–亚伦·迪古拉(Aaron Digulla)
2015年10月7日在8:51

它在Ubuntu LTS(14.04)上不起作用。这是最近的一个))

– podarok
2015年10月7日13:16

@podarok哪个版本的GNU coreutils?我的是8.24。

–亚伦·迪古拉(Aaron Digulla)
2015年10月8日在7:33

缓存可能是一个不好的名词。我想到的是在此端口superuser.com/a/597173/121352中完成的操作,在该端口中,我们将磁盘内容扫描一次到映射中,然后继续使用该映射中的数据,而不是再次击中磁盘。

–亨尼斯
16年1月12日在14:09

#7 楼

请注意,您无法在不同的系统/机器上比较带有du的目录,但不能确保两者共享文件系统的相同块大小。如果将某些文件从linux计算机同步到nas,并且您想自己比较已同步的目录,则这可能很重要。由于块大小不同,du可能会得到不同的结果。.

#8 楼

您可能还想签出xdiskusage。将为您提供相同的信息,但以图形方式显示,并允许进行深入分析(非常有用)。对于KDE甚至Windows,还有其他类似的实用程序。

#9 楼

您可以将lsawk结合使用: ls开始处理数据。标准分隔符是空格。和变量awk初始化为零;对于awk输出的每一行/每一行执行以下语句。它仅以大小递增totls代表第五列(由tot输出)。最后,我们将除以(1024 * 1024)以总的兆字节为单位。

如果将其转换为脚本或函数(.bashrc),也可以使用它来获取某些子集的大小目录,具体取决于文件类型。

如果您需要系统范围的信息,则可能派上用场了!

评论


我同意可以扩展此示例并执行一些技巧,例如获得“某些目录子集的大小,根据文件类型”等。这似乎是一个很好的起点。然而,这种解决方案从一开始就存在缺陷。对于每个希望使用此方法的用户,我建议阅读该问题的答案和评论以及其中的链接文章。我不是说你根本做不到。知道局限性,仅此而已。

–卡米尔·马乔洛夫斯基(Kamil Maciorowski)
16-12-22在18:42