ls -la
时,我并没有真正获得文件夹的摘要大小。如果我使用
df
,我会得到每个已挂载文件系统的大小,但这也无济于事。使用du
,我可以获得每个子目录的大小以及整个文件系统的摘要。但是我只希望在文件系统的ROOT文件夹中具有每个目录的摘要大小。有什么命令可以实现吗?
#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 楼
您可以将ls
与awk
结合使用: ls
开始处理数据。标准分隔符是空格。和变量awk
初始化为零;对于awk
输出的每一行/每一行执行以下语句。它仅以大小递增tot
。 ls
代表第五列(由tot
输出)。最后,我们将除以(1024 * 1024)以总的兆字节为单位。如果将其转换为脚本或函数(.bashrc),也可以使用它来获取某些子集的大小目录,具体取决于文件类型。
如果您需要系统范围的信息,则
可能派上用场了!评论
我同意可以扩展此示例并执行一些技巧,例如获得“某些目录子集的大小,根据文件类型”等。这似乎是一个很好的起点。然而,这种解决方案从一开始就存在缺陷。对于每个希望使用此方法的用户,我建议阅读该问题的答案和评论以及其中的链接文章。我不是说你根本做不到。知道局限性,仅此而已。
–卡米尔·马乔洛夫斯基(Kamil Maciorowski)
16-12-22在18:42
评论
--total标志对我很有帮助。例如。 du -sh-总应用程序/ *。 askubuntu.com/a/465436/48214