如何找出最占用空间的目录或文件?


11

我的磁盘空间不足:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sda7       803G  715G   48G  95% /home

我想遍历整个主目录,找出前十个占用空间的目录或文件,以确定要删除的人。

du -sh *可以看到所有子目录的大小,但是只能获取当前文件夹。我可能需要分别递归分成多个子目录,才能弄清楚谁是我的罪魁祸首。

有什么好方法吗?

Answers:



10

ncdu是一个命令行选项,可扫描目录并从最高到最低列出磁盘使用情况。这是我的工具。

您仍然必须以这种方式递归潜水,但这是一种很好的简便方法。


9

使用此命令:

t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');du / –exclude /proc –exclude /sys –max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++) {printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'

它将在命令行中显示一种图形,该图形以百分比形式显示占用最多空间的目录。

如果您只想分析/home-您可以在命令中指定以下内容:

t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');du /home –exclude /proc –exclude /sys –max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++) {printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'

它看起来像这样: 在此处输入图片说明

取自这里


9

du | 排序-rn | 头

  • du =磁盘使用率
  • 按数字顺序排序,反向
  • 前十行

4

猴面包树+1。在命令行上,我通常只使用du -hcsx *du -hcsx * | sort -h(需要最新版本的sort),然后继续检查子目录。

此外,它mc还有一个巧妙的功能:通过在子目录上按Ctrl+ 来计算子目录的大小Space(按Ctrl+ Space在其上..以使其计算所有子目录的大小。然后,您可以在菜单中选择按大小排序。


2
在命令行上,您应该尝试ncdu。基本上,这是一个ncurses。
罗布

1

尝试这个:

du -a /dir | sort -nr | cut -f2 | xargs du -sh | head -n 10

0

另一个GUI收藏夹:kdirstat

它具有良好的向下钻取功能,以及(可扩展的)工具菜单可帮助您删除/压缩文件。

我还有一个命令行脚本,称为dir_usage,已上传到pastebin。


-1
find . -type f -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

上面的命令行按顺序执行以下操作:

  • 查找当前文件夹中的所有文件(不是目录)
  • 显示它们各自的用法
  • 对结果进行数字排序
  • 仅使用最后10行(使用率最高)
  • 剪掉10个文件名(第一列是用法,第二列是文件名)
  • 显示每个文件名的用法(以人工格式)

这将导致列出当前文件夹和子文件夹中最多10个文件的可读大小。


3
您能否扩大答案?
50-3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.