如何获取目录和子目录的大小汇总?
假设我想获取一个Linux文件系统的每个目录的大小。当我使用ls -la
的时候,我并没有得到文件夹的大小汇总。
但我只想得到文件系统ROOT文件夹内的每个目录的大小。有没有什么命令可以实现?
我经常需要找到最大的目录,所以要得到一个包含20个最大的目录的排序列表,我是这样做的:
du -m /some/path | sort -nr | head -n 20
在这种情况下,大小将以兆字节为单位报告。
我喜欢用Ncdu来做这个,你可以用光标来浏览和钻取目录结构,效果非常好。
这并不容易。du
命令要么显示文件和文件夹(默认值),要么只显示你在命令行中指定的所有项目的大小(选项-s
)。你可以用--threshold
(在我的例子中是1MB)去掉它们:
du -h | sort -h
这个命令的好处是它包括了隐藏的点状文件夹(以.
开头的文件夹)。
请注意,你不能在不同系统/机器上的目录与du
进行比较,因为在没有确定两者共享相同的文件系统块大小的情况下,你不能将其与du
进行比较。如果你把一些文件从linux系统的机器上rsync到nas,而你想在你自己的机器上比较同步后的目录,这可能会算数。由于块大小不同,你可能会得到不同的结果。
你可能也想看看xdiskusage。会给你同样的信息,但以图表形式显示,还可以向下钻取(非常有用)。在KDE甚至是Windows中,还有其他类似的工具。
可以将ls
与awk
配合使用:
ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'
&001
ls
的输出被输送到awk
,awk
开始处理数据。标准分界符为空格。和变量tot
被初始化为0;对ls
输出的每一行/每一行都执行以下语句。它只是随着tot
的大小增加$5
,ls
代表第五列(由kdirstat
输出)。
如果你想把它转换成一个脚本或函数(.bashrc),你也可以用它来得到某些子目录的大小,根据文件类型来计算。