我有一串目录,我想使用 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
取值、
a
、b
和c
。d
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
您的问题不太清楚。这些目录是彼此的子目录吗?无论如何,这里有一些选择:
更改 dir1 的权限和全部其子目录和文件
chmod -R 775 dir1
更改 dir1 和特定子目录的权限
chmod 775 dir1 dir1/dir2 /dir1/dir2/dir3
更改 dir1 的所有子目录的权限
find dir1 -type d -exec chmod 775 {}\;