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

如何编写Bash脚本统计目录下拥有文件数量最多的用户

解决方法

你当前使用的uniq -c只能统计连续出现的相同用户名,所以同个用户的计数被拆分成了多条,只需要在现有脚本的输出后新增一段awk逻辑做全局汇总即可。

修改后的完整脚本

#!/bin/bash 
while read DIRNAME
do
        # 给DIRNAME加双引号兼容带空格的目录路径
        ls -l "$DIRNAME" | awk 'NR>1 {print $4}' | uniq -c      
done | awk '
# 汇总所有用户的总文件数
{
    user_total[$2] += $1
}
END {
    max_num = 0
    top_user = ""
    # 遍历找到总文件数最大的用户
    for (username in user_total) {
        if (user_total[username] > max_num) {
            max_num = user_total[username]
            top_user = username
        }
    }
    print top_user
}'

更精简的优化版本

可以省去uniq -c步骤,直接单次awk统计单个目录的用户计数,减少管道层级:

#!/bin/bash 
while read DIRNAME
do
        ls -l "$DIRNAME" | awk 'NR>1 {cnt[$4]++} END {for(u in cnt) print cnt[u], u}'
done | awk '{sum[$2]+=$1} END {for(u in sum) if(sum[u]>m) {m=sum[u];r=u} print r}'

测试输入/etc目录时,会直接输出预期结果root。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:51:03