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

如何在集群中按用户统计文件数量及占用空间?

集群环境下按用户统计文件数量与占用空间的方法

Bash 实现方式

一键统计命令

通过find遍历目标目录,结合awk聚合统计每个用户的文件数量和总占用空间:

find /user/hive/warehouse/yp.db -type f -printf "%u %s\n" | awk '{
    count[$1]++;          # 累加用户的文件数量
    size[$1] += $2;       # 累加用户的文件总大小(字节)
} END {
    # 循环输出统计结果,将字节转换为GB
    for (user in count) {
        printf "用户%s: 文件数量=%d, 总占用空间=%.2fGB\n", user, count[user], size[user]/1024/1024/1024;
    }
}'
  • 说明:find的%u参数获取文件属主用户名,%s获取文件字节大小;awk通过数组实现分组统计,最后统一格式化输出。

Python 实现方式

正确统计脚本

以下脚本通过遍历目录文件、获取文件属主信息,实现精准统计:

import os
import pwd
from collections import defaultdict

target_dir = "/user/hive/warehouse/yp.db"
# 初始化统计字典:键为用户名,值为[文件数量, 总大小(字节)]
user_stats = defaultdict(lambda: [0, 0])

# 遍历目标目录下所有文件
for root, _, files in os.walk(target_dir):
    for file_name in files:
        file_path = os.path.join(root, file_name)
        try:
            # 获取文件的属主UID,转换为用户名
            file_stat = os.stat(file_path)
            username = pwd.getpwuid(file_stat.st_uid).pw_name
            # 更新统计数据
            user_stats[username][0] += 1
            user_stats[username][1] += file_stat.st_size
        except Exception as e:
            print(f"处理文件 {file_path} 失败: {str(e)}")

# 格式化输出结果
for user, (file_count, total_size) in user_stats.items():
    total_size_gb = total_size / (1024 ** 3)
    print(f"用户{user}: 文件数量={file_count}, 总占用空间={total_size_gb:.2f}GB")

原代码问题修正

你提供的原代码存在两处核心错误:

  1. cut -d: -f1 /user/hive/warehouse/yp.db逻辑错误:该路径是Hive仓库目录,并非用户密码文件(如/etc/passwd),无法提取用户名;
  2. 调用du -s的逻辑错误:仅统计目录大小,无法区分不同用户创建的文件,不符合按用户统计的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:52:27