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

如何获取指定用户的所有文件夹并按大小排序,同时统计总大小?

特定用户文件夹按大小排序并统计总大小的解决方案

你的原脚本存在两个主要问题:一是会遍历所有匹配的文件和文件夹(而你只需要文件夹),二是单独对每个文件夹执行du会重复计算嵌套文件夹的大小,同时无法直接得到总大小。下面是优化后的两种方案:

方案1:统计文件夹包含内容的总大小(含子文件夹)

该方案会列出所有符合条件的文件夹,并显示每个文件夹包含所有内容的大小,最后统计总和:

#!/bin/bash

read -p "Enter user: " username

# 找到目标用户的所有文件夹,按人类可读大小倒序排序
find /path/ -maxdepth 4 -user "$username" -type d -print0 | du -sh --files0-from=- | sort -hr

# 计算并显示总大小(转换为GB单位,可按需调整)
echo -e "\nTotal size:"
find /path/ -maxdepth 4 -user "$username" -type d -print0 | du -sb --files0-from=- | awk '{sum+=$1} END {printf "%.2f GB\n", sum/1024/1024/1024}'

关键参数说明:

  • -type d:仅筛选文件夹,排除文件
  • -print0 + --files0-from=-:处理包含空格、特殊字符的文件夹名称,避免脚本报错
  • du -sh:输出人类可读的文件夹总大小(含子文件夹)
  • sort -hr:按大小倒序排序(h识别人类可读单位,r倒序)
  • du -sb:输出字节数,方便awk精确求和,最后转换为GB并保留两位小数

方案2:仅统计文件夹本身的大小(不含子文件夹)

如果你不想重复统计父文件夹和子文件夹的大小,可以使用-d 0参数让du仅计算文件夹自身的大小:

#!/bin/bash

read -p "Enter user: " username

# 仅统计文件夹自身大小,按大小倒序排序
find /path/ -maxdepth 4 -user "$username" -type d -print0 | du -d 0 -h --files0-from=- | sort -hr

# 计算并显示总大小
echo -e "\nTotal size:"
find /path/ -maxdepth 4 -user "$username" -type d -print0 | du -d 0 -b --files0-from=- | awk '{sum+=$1} END {printf "%.2f GB\n", sum/1024/1024/1024}'

关键参数说明:

  • du -d 0:仅统计当前文件夹的大小,不递归计算子文件夹内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:30:47