如何在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
相关产品推荐
相关产品推荐

