使用bash更改路径中每个目录的权限

时间:2018-05-24 16:50:28

标签: linux bash

我正在尝试更改用户将指定的路径中每个目录的权限。这将在bash脚本中完成。例如:

DIR = /a/b/c/d/e/f/

chmod 777 /a/b/c/d/e/f/

chmod 777 /a/b/c/d/e/

chmod 777 /a/b/c/d/

chmod 777 /a/b/c/

chmod 777 /a/b/

chmod 777 /a/

777只是一个例子。解决方案应允许任何权限。

我不想更改目录中文件的权限,我不能假设这些是唯一的子目录。我只想更改用户指定路径中明确的权限。

2 个答案:

答案 0 :(得分:0)

显而易见的方法是从最深处开始,并在循环中使用dirname向上迭代:

perms=a+rX
d=a/b/c/d/e/f

while [ "$d" != . ]
do
    chmod $perms "$d"
    d=$(dirname "$d")
done

这是所有便携式外壳,因此不依赖于Bash - 任何符合POSIX标准的外壳都足够了。

我使用过相对目录名称,因为您真的不希望在真实系统上更改/的权限。

您当然可以使用替换扩展而不是调用  dirname如果您需要:d=${d%/*}

答案 1 :(得分:-1)

您确定要在某些目录上设置777吗?

无论如何,您可以使用dirname实现此目的并在$DIR上递归到根目录:

DIR=/a/b/c/d/e/f/
while [[ $DIR =~ /.+ ]] ;do
  chmod 777 $DIR
  DIR=$(dirname $DIR)
done