Answers:
这就是您要寻找的:
du -sh /*
这意味着什么:
-s
仅给出每个命令行参数的总数。-h
用于易于理解的后缀,例如M
兆字节和G
千兆字节(可选)。/*
只需扩展到中的所有目录(和文件)/
。
注意:不包含点文件;跑shopt -s dotglob
也包括那些。
按大小排序也很有用:
du -sh /* | sort -h
这里:
-h
确保sort
正确解释人类可读的后缀。shopt -s dotglob
用来将它们包括在计数中。
/*
,例如./
对于当前目录或当前目录./*
中的每个项目。
./*/
用来仅获取子文件夹,而不是所有项目
du -sh /* | sort -h
sort
没有@ c1phr -h
,则还需要将其保留du
,否则排序将混合成千/兆/兆字节。du -s /* | sort -nr
。
我经常需要找到最大的目录,因此要获得包含20个最大目录的排序列表,请执行以下操作:
du -m /some/path | sort -nr | head -n 20
在这种情况下,大小将以兆字节报告。
我喜欢为此使用Ncdu,您可以使用光标来导航和向下钻取它确实运行良好的目录结构。
b
用来放入目录中的外壳程序。
现有的答案非常有帮助,也许有些初学者(例如我)也会发现此帮助。
非常基本的循环,但是对我来说,这是其他一些与大小相关的操作的良好起点:
for each in $(ls) ; do du -hs "$each" ; done
与第一个答案非常相似,结果与1.)几乎相同,但是花了一些时间才能理解*与./*在子目录中的区别:
du -sh ./*
for each
不起作用,因为它将控制台字符(例如\033[
)添加到文件夹列表中
for each
。它将无法正常工作
以下du
调用应在BSD系统上起作用:
du -d 1 /
du
(Ubuntu 10.4)没有-d
选择。您在什么系统上?
du -sk /*
。我非常讨厌这些-k
东西。Linux -h
完全是一团糟。
--max-depth
这不容易。该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
请注意,您无法du
在没有确定的情况下将目录与不同系统/机器上的目录进行比较,因为它们都共享文件系统的相同块大小。如果您将某些文件从linux计算机同步到nas,并且想自己比较已同步的目录,则这可能很重要。du
由于块大小不同,您可能会得到不同的结果。
您可能还想签出xdiskusage。将为您提供相同的信息,但以图形方式显示,并允许进行深入分析(非常有用)。对于KDE甚至Windows,还有其他类似的实用程序。
您可以ls
结合使用awk
:
ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'
的输出通过ls
管道传递到awk
。awk
开始处理数据。标准分隔符是空格。总和变量tot
初始化为零;对于所输出的每一行/每一行执行以下语句ls
。它只是tot
随着大小而增加。$5
代表第五列(由输出ls
)。最后,我们除以(1024 * 1024)以总和为兆字节。
如果要将其转换为脚本或函数(.bashrc),则还可以根据文件类型使用它来获取某些目录子集的大小。
如果您需要系统范围的信息,kdirstat
可能会派上用场!
--total
标志是对我有帮助。例如du -sh --total applications/*
。askubuntu.com/a/465436/48214