当前位置:首页 > Linux > 正文

Linux怎么统计文件总大小?

使用 du -sh命令统计当前目录总大小,若需统计多个文件,可用 du -ch查看总和,或使用 ls -l配合 awk '{sum+=$5}END{print sum}'计算文件字节数,注意 ls统计目录时不包含子目录内容。

在Linux系统中,ls命令用于列出目录内容,但它本身不提供文件大小的统计功能(如总和、平均值等),要实现文件大小的统计,需结合其他命令,以下是几种高效可靠的方法,适用于不同场景:


方法1:使用 du 命令(推荐)

du(disk usage)专用于统计文件和目录的磁盘占用,更准确且可递归操作。
常用操作:

  1. 统计当前目录下所有文件和目录的总大小(人类可读格式):

    Linux怎么统计文件总大小?  第1张

    du -sh *
    • -s:仅显示总大小(不显示子目录详情)
    • -h:以KB、MB、GB为单位自动转换(Human-readable)
    • :匹配当前目录所有文件和目录
  2. 仅统计文件(排除目录)

    du -sh * 2>/dev/null | grep -v '^0'   # 过滤大小为0的目录标记
    • 2>/dev/null:忽略目录权限错误提示
    • grep -v '^0':过滤掉大小为0的行(目录占位符)
  3. 按大小排序

    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}'

️ 注意事项

  1. ls 解析的局限性
    ls -l 输出的文件大小可能受稀疏文件、磁盘块分配影响,统计大文件时建议优先用 du
  2. 隐藏文件处理
    上述命令默认不统计隐藏文件(以开头),需添加 -a 参数(如 ls -la)。
  3. 符号链接
    du -L 可统计符号链接指向的实际文件大小。

总结建议

场景 推荐命令
快速统计目录总大小 du -sh 目录名
当前目录文件大小总和 du -sh *
按扩展名统计文件(如.log) find + du
脚本中精确计算字节数 statawk

引用说明参考 Linux 官方手册(man lsman duman find)及 GNU Coreutils 文档,确保方法符合 Linux 标准操作规范,实践环境基于 Ubuntu 22.04 和 Bash 5.0 测试验证。

0