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

如何在Bash脚本中检查所有子文件夹及文件归属特定用户

刚好之前处理过类似的需求,给你整理了一个可靠的bash脚本实现,完全满足你遍历指定目录、检查所有文件/文件夹所有者的要求:

需求明确

我们需要实现的核心功能:遍历指定基础文件夹的所有子文件夹及文件,只要存在任何所有者不是my_user的项,就返回失败(对应bash里的非0退出码)。

完整实现脚本

这里是经过优化调整的版本,修复了原示例里的递归返回值处理、空目录通配符匹配等小问题:

#!/bin/bash

checkOwnerShipOfFiles () {
    local files=$1
    for f in $files; do
        # 跳过不存在的路径(比如空目录下的通配符会变成字面量,直接跳过)
        [ -e "$f" ] || continue
        
        # 获取当前路径的所有者用户名
        local owner=$(stat -c %U "$f")
        # 检查所有者是否符合要求
        if [ "$owner" != "my_user" ]; then
            echo "Invalid owner: $owner of path $f"
            return 255  # 返回非0值代表检查失败
        fi

        # 如果是目录,递归检查其下所有内容
        if [ -d "$f" ]; then
            checkOwnerShipOfFiles "$f/*"
            local ret=$?
            # 只要递归检查失败,就立即向上传递失败状态
            if [ $ret -ne 0 ]; then
                return $ret
            fi
        fi
    done
    return 0  # 所有项检查通过,返回0代表成功
}

# --------------------------
# 调用示例:替换为你的目标目录
# --------------------------
TARGET_DIR="/path/to/your/base/folder"

if checkOwnerShipOfFiles "$TARGET_DIR/*"; then
    echo "✅ All files and folders under $TARGET_DIR are owned by my_user"
else
    echo "❌ Found files/folders with invalid owner under $TARGET_DIR"
    exit 1
fi
脚本关键细节说明
  • 递归遍历逻辑:函数checkOwnerShipOfFiles通过调用自身,实现对目录的深度优先遍历,确保每个子目录和文件都被检查到
  • 所有者检查:使用stat -c %U "$f"命令获取文件/目录的用户名,和目标用户my_user做字符串对比
  • 快速失败机制:一旦发现不符合要求的所有者,立即返回255并终止检查,避免不必要的遍历
  • 边界情况处理:添加了[ -e "$f" ] || continue,解决空目录下通配符*会被当作普通字符串处理的问题
使用注意事项
  • 执行脚本的用户需要有目标目录下所有文件/文件夹的读取权限,否则stat命令会报错,导致检查中断
  • 如果目标目录路径包含空格,一定要用双引号包裹参数(比如checkOwnerShipOfFiles "/my folder with spaces/*")
  • 可以直接修改脚本里的my_user为你实际需要检查的目标用户名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:47:51