Linux shell脚本实现:统计输入目录下拥有文件数最多的用户
Shell 脚本实现方案
完整可运行的脚本代码如下:
#!/bin/bash while IFS= read -r dirname; do # 跳过输入空行 [[ -z "$dirname" ]] && continue # 统计并输出当前目录下文件数量最多的用户名 find "$dirname" -type f -printf '%u\n' 2>/dev/null \ | sort \ | uniq -c \ | sort -nr \ | head -n 1 \ | awk '{print $2}' done
核心逻辑说明
逐行处理输入的目录路径时,执行以下步骤:
- 用
find命令递归遍历目标目录下的所有普通文件,-printf '%u\n'参数指定每行输出一个文件的所有者用户名 2>/dev/null用于丢弃无权限访问文件、目录不存在等错误提示,避免干扰标准输出sort对输出的用户名列表排序,为去重统计做准备uniq -c统计每个用户名的出现次数,输出格式为[文件数量] [用户名]sort -nr按照文件数量做数值倒序排序,文件数最多的用户排在最上方head -n 1提取排序后的第一条记录awk '{print $2}'提取记录中的用户名字段输出
可选优化调整
- 如果不需要递归统计子目录内的文件,只需统计目标目录第一层的文件,可将find命令改为
find "$dirname" -maxdepth 1 -type f -printf '%u\n' 2>/dev/null - 如果需要处理空目录的情况,避免空输出,可以将统计结果存入变量后做默认值处理:
# 替换循环内的逻辑即可 winner=$(find "$dirname" -type f -printf '%u\n' 2>/dev/null | sort | uniq -c | sort -nr | head -n 1 | awk '{print $2}') echo "${winner:-none}"
使用时将脚本保存为thewinneris,执行chmod +x thewinneris赋予执行权限后,即可按照示例方式运行测试。
内容的提问来源于stack exchange,提问作者Nathace
相关产品推荐
相关产品推荐

