本文目录导读:

在脚本中对 du 命令的输出进行排序,通常是为了找出占用磁盘空间最多的目录或文件,最常用的方法是将 du 的输出通过管道传递给 sort 命令。
核心排序点在于:sort 默认按字典序排序,而 du 输出的数字是字符串,要对文件大小进行数值排序,必须使用 -n 或 -h 选项。
以下是几种常见的脚本实现方式:
按大小升序排列(从小到大)
du -sk * | sort -n
-s:显示每个目录/文件的总计,不显示子目录详情。-k:以 KB 为显示单位。sort -n:按纯数字(数值)升序排列。
按大小降序排列(从大到小,最常用)
这是清理磁盘空间时最常见的需求。
du -sk * | sort -nr
sort -r:反转排序结果(从大到小)。-n:强制数值排序。
更易读的版本(推荐在脚本中使用):
du -sh * | sort -hr
-h:人类可读格式(如 KB、MB、GB)。sort -h:这是关键。sort -h能理解人类可读的大小后缀(如 1K、2M、3G),并按实际数值排序,这比单独用-n更直观。-r:降序。
注意: sort -h 在 coreutils >= 7.5(2009年后)及所有现代 Linux 发行版、macOS 中均可用,如果你的脚本目标环境非常古老(如旧版 AIX、Solaris),则需用 -k 和 -n 组合。
深入子目录一级并排序
如果只想看当前目录下一级子目录的大小(不包括当前目录下的文件):
du -sh */ | sort -hr
- 只匹配目录,不匹配文件。
显示总大小并指定最大深度
控制 du 的递归深度,避免输出过多。
# 显示 depth 1 以内的所有内容(包括文件),并按大小排序 du -hd1 . | sort -hr # 显示 depth 2 以内的所有目录 du -hd2 . | sort -hr
--max-depth=1或-d1,具体取决于du版本(GNU与BSD/macOS差异),在脚本中推荐使用-d,因为它比--max-depth更通用(macOS 不支持--max-depth)。
一个完整的脚本示例(查找并清理大文件/目录)
#!/bin/bash # 功能:列出当前目录下所有子目录的大小,按大小降序排列,并只显示前10个 echo "================================" echo " Top 10 largest directories in: $(pwd)" echo "================================" du -h -d 1 . 2>/dev/null | sort -hr | head -n 10
说明:
2>/dev/null:屏蔽权限不足导致的错误信息(du无法读取某些目录),使输出更干净(但注意这也会忽略真正的错误)。| head -n 10:只显示前10行。
常见问题与陷阱
| 问题 | 解释 | 解决办法 |
|---|---|---|
| 排序错误 | 使用 du -sh 后接 sort -n,结果出现 1.1G 排在 800M 前面的情况 |
必须使用 sort -h 来识别 K、M、G 单位 |
| 权限不足 | du 遍历 /proc、/sys 或他人的家目录时会报错 |
添加 2>/dev/null 忽略错误(但要谨慎) |
| 递归过深 | 不加 -d 或 --max-depth,du 会输出所有嵌套子目录 |
根据需求设置合适的 -d N 参数 |
| 单位不统一 | 混合使用不同单位(如 KB 和 GB),sort -n 会错误比较 |
要么统一使用 -k,要么使用 sort -h |
总结最佳实践
- 对于人类可读的报告:使用
du -sh * | sort -hr - 对于脚本中需要数值计算的:使用
du -sk * | sort -nr(大小单位为 KB,易于截取字段运算) - 控制深度:使用
-d 1而不是-s,因为-s等于-d 0,看不到下一级。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播