如何为目录路径中的每个目录设置权限

时间:2011-08-29 21:58:22

标签: bash scripting chmod

我正在网络服务器上创建一个我想要可执行的远程目录路径。我使用如下命令远程创建它:

ssh user@machine mkdir -p a/b/c/d/e/f

接下来,我希望能够chmod目录a - f,但避免在远程目录根目录上执行chmod -r

是否有一个优雅的机制从a/b/c/d/e/f路径开始并在不解析每个chmod的情况下执行有效的chmod a+x a; chmod a+x a/b; chmod a+x a/b/c; ...

4 个答案:

答案 0 :(得分:1)

有人认为您可能会尝试按如下方式创建一个远程bash脚本(目录名称应以空格分隔):

#!/bin/bash
for i in $*
do
  mkdir $i
  chmod a+x $i
  cd $i
done

或者您可以将umask设置为umask 066,这将设置您创建的任何内容的默认权限。有关说明,请参阅this网站。

答案 1 :(得分:1)

可能是这样的:

DIR=
for i in a b c d e f; do
    DIR=$DIR$i/
    chmod a+x $DIR
done

答案 2 :(得分:0)

#!/bin/sh

perm=$1
shift

# iterate over all argument paths
for p; do
    # chmod up successively from destination 
    while true; do
        case $p in
            */* ) chmod "$perm" "$p"
                   p=${p%/*} ;;
            * ) break ;;
        esac
    done
done

答案 3 :(得分:-1)

您可以使用find命令

find /path_at_remote -type d -exec chmod a+x "{}" \;  (not tested)