更改一系列目录的权限

更改一系列目录的权限

我有一串目录,我想使用 chmod 之类的命令将所有这些目录的权限更改为 775 (rwxrwxr-x)。

问题在于该字符串是可编辑的,因此它可能因用户而异,因此 chmod -R 不起作用,因为一个用户可能有

/apple/a/b 

而另一个用户

/android/a/b/c/d

谢谢您的帮助 :)

答案1

如果变量细绳包含路径,则/a/b/c/d以下指令将更改/a/a/b和的权限:/a/b/c/a/b/c/d

(
    IFS=/
    unset substring

    for dir in $string; do
        unset IFS
        substring="$substring$dir/"
        test "$substring" != "/" && chmod 755 "$substring"
    done
)

怎么运行的

  • 括号在子 shell 中执行所有操作,因此更改变量独立财务顾问子字符串不会对子 shell 之外产生任何影响。

  • IFS=/将内部文件分隔符设置为削减,因此 for 循环将$string在斜线处分裂。

  • for dir in $string; do ... done...将对中的每个组件执行一次$string

    在我们的示例中,将$dir取值abcd

  • unset IFS将内部文件分隔符更改回默认值,因为它会影响目录路径中的斜杠。

  • substring="$substring$dir/"$dir将的当前值附加到$substring

    在我们的示例中,将$susbtring取值//a//a/b//a/b/c//a/b/c/d/

  • test "$substring" != "/" && chmod 755 "$substring"检查的当前值是否$susbtring与不同/

    如果是,它会设置所需的权限。

答案2

您的问题不太清楚。这些目录是彼此的子目录吗?无论如何,这里有一些选择:

  1. 更改 dir1 的权限和全部其子目录和文件

    chmod -R 775 dir1
    
  2. 更改 dir1 和特定子目录的权限

    chmod  775 dir1 dir1/dir2 /dir1/dir2/dir3
    
  3. 更改 dir1 的所有子目录的权限

    find dir1 -type d -exec chmod 775 {}\;
    

相关内容