如何用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
相关产品推荐
相关产品推荐

