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

如何在Bash脚本中修改指定路径下各级目录的权限?

解决方案:批量修改指定路径的各级目录权限

刚好能解决你的需求,这里有个简洁的Bash脚本,专门用来处理从指定目录逐层向上修改每一级父目录的权限,完全符合你的要求:

#!/bin/bash

# 检查用户是否传入了正确的参数
if [ $# -ne 2 ]; then
    echo "使用方法: $0 <目标目录路径> <权限设置>"
    echo "举个例子: $0 /a/b/c/d/e/f/ 777 或者 $0 ./my/project/ u=rwx,g=rx,o=rx"
    exit 1
fi

TARGET_PATH="$1"
PERM_SET="$2"

# 把路径转换成绝对路径,避免相对路径带来的层级混乱
ABS_PATH=$(realpath -m "$TARGET_PATH")

# 从目标目录开始,逐层向上处理每一级目录
current="$ABS_PATH"
while true; do
    # 只修改当前目录的权限,不会碰里面的文件或子目录
    chmod "$PERM_SET" "$current"
    echo "已更新权限: $current -> $PERM_SET"

    # 获取上一级目录
    parent=$(dirname "$current")

    # 到达根目录时停止循环(dirname处理/的时候返回的还是/)
    if [ "$parent" = "$current" ]; then
        break
    fi

    current="$parent"
done

脚本说明:

  • 参数校验:确保用户传入了目标路径和权限值,避免无意义的执行
  • 绝对路径转换:用realpath -m处理路径,就算目标目录不存在也能生成正确的绝对路径,适配各种场景
  • 循环逻辑:从用户指定的最底层目录开始,每次获取父目录,直到根目录为止,每一步只修改当前目录的权限
  • 权限兼容性:支持chmod所有合法的权限格式,不管是数字(如755、600)还是符号式(如u+rwx,g-w)都能用

注意事项:

  • 运行脚本需要对应目录的修改权限,比如修改系统级目录可能需要加上sudo
  • 测试阶段可以把chmod改成echo chmod,先预览要执行的命令,避免误操作
  • 脚本只会修改路径中明确包含的各级目录,不会影响目录内的文件或其他无关子目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:09:56