2010-07-11 17:26:29 +0000 2010-07-11 17:26:29 +0000
316
316

如何获取目录和子目录的大小汇总?

假设我想获取一个Linux文件系统的每个目录的大小。当我使用ls -la的时候,我并没有得到文件夹的大小汇总。

但我只想得到文件系统ROOT文件夹内的每个目录的大小。有没有什么命令可以实现?

答案 (9)

450
450
450
2010-07-11 17:28:23 +0000

这意味着什么:

  • -s只给出每个命令行参数的总和。
  • -h用于人类可读的后缀,如M表示兆字节,G表示千兆字节(可选)。

  • /*简单地扩展到/中的所有目录(和文件)。

也可以按大小排序:

du -sh /*

这里:

  • -h确保sort正确地解释人类可读后缀。
84
84
84
2010-07-29 12:07:31 +0000

我经常需要找到最大的目录,所以要得到一个包含20个最大的目录的排序列表,我是这样做的:

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

在这种情况下,大小将以兆字节为单位报告。

24
24
24
2015-12-24 10:07:52 +0000

我喜欢用Ncdu来做这个,你可以用光标来浏览和钻取目录结构,效果非常好。

12
12
12
2012-11-22 16:53:04 +0000

现有的答案很有帮助,也许一些初学者(像我这样的)也会觉得很有帮助,

  1. 很基本的循环,但对我来说,这对我来说是一个很好的开始,可以进行其他一些与大小相关的操作:

  2. 和第一个答案非常相似,结果和1.)差不多,但我花了一些时间才明白了在子目录中的./和./的区别。

9
9
9
2010-07-11 17:29:10 +0000

下面的du调用应该在BSD系统中运行:

du -d 1 /
5
5
5
2015-07-24 11:04:13 +0000

这并不容易。du命令要么显示文件和文件夹(默认值),要么只显示你在命令行中指定的所有项目的大小(选项-s)。你可以用--threshold(在我的例子中是1MB)去掉它们:

du -h | sort -h

这个命令的好处是它包括了隐藏的点状文件夹(以.开头的文件夹)。

2
2
2
2013-10-05 15:36:58 +0000

请注意,你不能在不同系统/机器上的目录与du进行比较,因为在没有确定两者共享相同的文件系统块大小的情况下,你不能将其与du进行比较。如果你把一些文件从linux系统的机器上rsync到nas,而你想在你自己的机器上比较同步后的目录,这可能会算数。由于块大小不同,你可能会得到不同的结果。

1
1
1
2010-07-12 19:42:17 +0000

你可能也想看看xdiskusage。会给你同样的信息,但以图表形式显示,还可以向下钻取(非常有用)。在KDE甚至是Windows中,还有其他类似的工具。

1
1
1
2016-12-20 09:56:34 +0000

可以将lsawk配合使用:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

&001

ls的输出被输送到awkawk开始处理数据。标准分界符为空格。和变量tot被初始化为0;对ls输出的每一行/每一行都执行以下语句。它只是随着tot的大小增加$5ls代表第五列(由kdirstat输出)。

如果你想把它转换成一个脚本或函数(.bashrc),你也可以用它来得到某些子目录的大小,根据文件类型来计算。