You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用tree命令以树形结构显示包含所有文件大小的目录?

解决tree命令展示目录树形+准确统计总大小的问题

首先,你遇到的tree统计大小偏小的核心原因是:tree默认不包含隐藏文件/目录,而du会统计所有文件(包括隐藏的),所以先试试这个最简单的解决办法:

方法1:用tree自带参数实现(最省心)

直接给tree加上-a(显示所有文件/目录)参数,让--du统计到所有内容,大小就会和du一致:

tree -d --du -h -a PATH_TO_FOLDER

参数说明:

  • -d:仅列出目录
  • --du:计算每个目录的总大小(包含子目录和所有文件)
  • -h:以人类可读格式显示大小
  • -a:强制包含隐藏文件/目录

方法2:结合du和tree自定义输出(适合特殊需求)

如果tree自带参数仍无法满足格式要求,可以用脚本结合tree和du实现树形结构+准确大小:

保留树形连线的版本

这个脚本会保留tree的树形样式,同时在每个目录后附上du计算的准确大小:

tree -d --noreport -f PATH_TO_FOLDER | while read -r line; do
    # 提取行中的纯目录路径(去掉树形前缀的空格和连线)
    dir_path=$(echo "$line" | sed 's/^[│├└─ ]*//')
    if [ -d "$dir_path" ]; then
        size=$(du -sh "$dir_path" | awk '{print $1}')
        # 替换原行的路径部分,保留树形前缀
        echo "$line" | sed "s|$dir_path|$dir_path ($size)|"
    else
        echo "$line"
    fi
done

简化版(无树形连线)

如果不需要树形连线,用这个更简洁的命令:

tree -d -i -f PATH_TO_FOLDER | while read -r dir; do
    echo "$dir ($(du -sh "$dir" | awk '{print $1}'))"
done

补充说明

tree的--du参数本身是用来统计目录总大小的,但默认跳过隐藏文件,这就是它和du结果差异的根源。加上-a参数后,两者统计范围一致,结果就会匹配。

内容的提问来源于stack exchange,提问作者Santhosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:01:25