欢迎光临
我们一直在努力

du -sh * .[^.]* 2>/dev/null | sort -hr | head -n 10 和 find . -type f -exec ls -s {} + 2>/dev/null |

preface

1,du -sh * .[^.]* 2>/dev/null | sort -hr | head -n 10
2,find . -type f -printf ‘%s %p\\n’ 2>/dev/null | sort -nr | head -n 10 | awk ‘{printf “%8.2fM %s\\n”, $1/1024/1024, $2}’

一、du -sh * .[^.]* 2>/dev/null | sort -hr | head -n 10

命令的作用:

找出当前目录下占用空间最大的 10 个文件/目录(包括隐藏文件),并按大小从大到小排序显示。

命令拆解

du -sh * .[^.]* 2>/dev/null | sort -hr | head -n 10

1. du -sh * .[^.]*
  • du:统计磁盘占用空间(Disk Usage)
  • -s:summarize,只显示每个参数的总大小,不显示内部细节(不递归显示子目录内容)
  • -h:human-readable,用人类易读的方式显示大小(K、M、G、T 等)
  • *:匹配当前目录下所有非隐藏的文件和目录
  • .[^.]*:匹配隐藏的文件和目录(以 . 开头的)
    • 这个正则写法很巧妙,它能匹配 .abc、.git、.vscode 等,但不会匹配 .(当前目录)和 ..(上级目录)

所以这一部分会统计当前目录下所有可见 + 隐藏的文件和一级目录的大小。

2. 2>/dev/null
  • 把错误信息(stderr)丢弃
  • 常见原因:没有权限访问某些文件/目录、符号链接问题等,避免屏幕上刷一堆红字错误
3. | sort -hr
  • sort:排序
  • -h:human numeric sort,能正确识别 1.2G、980M、500K 这样的大小单位并正确排序
  • -r:reverse,倒序(从大到小)
4. | head -n 10
  • 只显示前 10 行(即占用空间最大的前 10 项)

实际效果示例

执行后可能会输出类似:

2.3G node_modules
1.8G backup.tar.gz
856M .cache
542M video.mp4
321M dist


常见变体 / 改进建议

  • 想看更深的子目录(推荐):

    du -sh * .[^.]* 2>/dev/null | sort -hr | head -n 10
    # 改成递归版本:
    du -sh .[^.]* * 2>/dev/null | sort -hr | head -n 20
    # 或者真正递归找最大的目录:
    du -h –max-depth=1 2>/dev/null | sort -hr | head -n 15

  • 只看目录,不看单个文件:

    du -sh */ .[^.]*/ 2>/dev/null | sort -hr | head -n 10

  • 最常用、最推荐的版本(很多人直接用这个):

    du -h –max-depth=1 2>/dev/null | sort -hr | head -n 15

二、find . -type f -printf ‘%s %p\\n’ 2>/dev/null | sort -nr | head -n 10 | awk ‘{printf “%8.2fM %s\\n”, $1/1024/1024, $2}’

命令的作用:

递归查找当前目录(及其所有子目录)中占用空间最大的 10 个文件,并以 MB 为单位、格式整齐地显示。


完整命令拆解

find . -type f -printf '%s %p\\n' 2>/dev/null | sort -nr | head -n 10 | awk '{printf "%8.2fM %s\\n", $1/1024/1024, $2}'

1. find . -type f -printf '%s %p\\n'
  • find .:从当前目录开始递归查找
  • -type f:只查找普通文件(不包含目录、符号链接等)
  • -printf '%s %p\\n':
    • %s:文件大小(单位是字节)
    • %p:文件完整路径
    • 输出格式示例:123456789 ./video.mp4
2. 2>/dev/null
  • 丢弃所有错误信息(比如权限拒绝、无法访问的目录等)
3. | sort -nr
  • sort:排序
  • -n:按数值排序(而不是字符串)
  • -r:倒序(从大到小)
4. | head -n 10
  • 只保留前 10 行 → 即最大的 10 个文件
5. | awk '{printf "%8.2fM %s\\n", $1/1024/1024, $2}'

这是最后的美化输出部分:

  • $1:文件大小(字节)
  • $2:文件路径
  • $1/1024/1024:把字节转换成 MB
  • printf "%8.2fM %s\\n":
    • %8.2f:保留两位小数,宽度至少 8 个字符(右对齐,让大小列对齐好看)
    • M:显示单位 MB
    • %s:显示文件路径

示例输出

2345.67M ./backup.tar.gz
1842.30M ./node_modules/react-dom/index.js
856.12M ./.cache/largefile.dat
542.80M ./videos/movie.mkv


优点与缺点

优点:

  • 精确到单个文件(不会把目录整体大小算进去)
  • 输出格式清晰、对齐好看
  • 纯文本,适合复制

缺点:

  • 如果文件非常大(几十 GB),显示为 MB 会显得数字很长
  • 路径太长时显示可能换行

改进建议(更推荐的版本)

如果你想要带 G/M/K 自动单位,可以使用这个更好看的版本:

find . -type f -printf '%s %p\\n' 2>/dev/null \\
| sort -nr \\
| head -n 10 \\
| numfmt –to=iec –format="%.2f" \\
| awk '{print $1, $2}'

或者最简洁但功能类似的版本:

find . -type f -exec ls -s {} + 2>/dev/null | sort -hr | head -n 15


赞(0)
未经允许不得转载:171主机测评 » du -sh * .[^.]* 2>/dev/null | sort -hr | head -n 10 和 find . -type f -exec ls -s {} + 2>/dev/null |
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址