上一篇
使用
du -sh命令统计当前目录总大小,若需统计多个文件,可用
du -ch查看总和,或使用
ls -l配合
awk '{sum+=$5}END{print sum}'计算文件字节数,注意
ls统计目录时不包含子目录内容。
在Linux系统中,ls命令用于列出目录内容,但它本身不提供文件大小的统计功能(如总和、平均值等),要实现文件大小的统计,需结合其他命令,以下是几种高效可靠的方法,适用于不同场景:
方法1:使用 du 命令(推荐)
du(disk usage)专用于统计文件和目录的磁盘占用,更准确且可递归操作。
常用操作:
-
统计当前目录下所有文件和目录的总大小(人类可读格式):

du -sh *
-s:仅显示总大小(不显示子目录详情)-h:以KB、MB、GB为单位自动转换(Human-readable)- :匹配当前目录所有文件和目录
-
仅统计文件(排除目录):
du -sh * 2>/dev/null | grep -v '^0' # 过滤大小为0的目录标记
2>/dev/null:忽略目录权限错误提示grep -v '^0':过滤掉大小为0的行(目录占位符)
-
按大小排序:

du -sh * | sort -h
方法2:ls + awk 组合(快速小文件统计)
适用于统计当前目录非隐藏文件的大小总和(单位:字节):
ls -l | awk '!/^total/ && !/^d/ {sum += $5} END {print sum}'
- 命令解析:
ls -l:长格式列出文件(含大小)awk '!/^total/':跳过首行”total”统计行!/^d/:排除目录(行首标记为d){sum += $5}:累加第5列(文件大小)END {print sum}:输出总和
- 转换为MB/GB:
ls -l | awk '!/^total/ && !/^d/ {sum += $5} END {print sum/1024/1024 " MB"}'
方法3:find + du(精确控制统计范围)
适合递归统计特定类型文件(如.log):

find . -type f -name "*.log" -exec du -ch {} + | grep total$
- 命令解析:
find . -type f -name "*.log":查找当前目录及子目录下所有.log文件-exec du -ch {} +:对找到的文件执行du -ch(-c显示总计)grep total$:提取最终统计行
方法4:stat 命令(获取单个文件元数据)
查看单个文件的精确大小(字节):
stat -c %s 文件名
- 统计多个文件总和:
stat -c %s 文件1 文件2 | awk '{sum+=$1} END {print sum}'
️ 注意事项
ls解析的局限性:
ls -l输出的文件大小可能受稀疏文件、磁盘块分配影响,统计大文件时建议优先用du。- 隐藏文件处理:
上述命令默认不统计隐藏文件(以开头),需添加-a参数(如ls -la)。 - 符号链接:
du -L可统计符号链接指向的实际文件大小。
总结建议
| 场景 | 推荐命令 |
|---|---|
| 快速统计目录总大小 | du -sh 目录名 |
| 当前目录文件大小总和 | du -sh * |
| 按扩展名统计文件(如.log) | find + du |
| 脚本中精确计算字节数 | stat 或 awk |
引用说明参考 Linux 官方手册(
man ls、man du、man find)及 GNU Coreutils 文档,确保方法符合 Linux 标准操作规范,实践环境基于 Ubuntu 22.04 和 Bash 5.0 测试验证。
