上一篇                     
               
			  Linux怎么统计文件总大小?
- Linux
- 2025-06-16
- 4749
 使用
 
 
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 测试验证。
 
  
			 
			 
			 
			 
			 
			 
			 
			