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 测试验证。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/26915.html