是否有一个对应于 x/X 的标志,但对于 Linux 上带有 chmod 的 s ?

是否有一个对应于 x/X 的标志,但对于 Linux 上带有 chmod 的 s ?

当使用chmod(在我的例子中是coreutils8.12 的一部分)并递归设置该x位时,存在方便的X(大写字母 x),仅在目录上设置该位。因此,如果您想x从所有文件中删除 并仅将其保留在文件夹中,您可以将其压缩到单个调用中,如下所示:

chmod -R a-x,a+X /path/to/folder

如果您的同事的 unixoid 系统概念起源于 20 世纪 80 年代,并且755他们只知道八进制,那么这一点尤其有用。

s然而,尽管文件和文件夹中的位含义存在类似的二元性,但我还没有找到这样的东西。我指的是chmod(1),特别是setgid行为。所以如果我这样做:

chmod -R g+ws /path/to/folder

我最终得到了文件文件夹类似地设置了位,而我想要的只是在文件夹上设置它,以便在那里创建的文件始终自动归所属组所有。

有没有一种方便的方法,缺少:

find /path/to/folder -type d -exec chmod g+s {} \;

???

答案1

当您使用-R开关 to时chmod,您是说您希望将相关权限更改递归地应用于文件和文件夹。

没有办法告诉chmod您只将这些设置应用于其中一个,因此您唯一的办法就是寻求工具的帮助,例如find构建目录列表,然后有选择地针对此列表执行命令execchmod

chmod您可以通过exec像这样使用命令+的变体来调用它来提高效率exec

$ find /path/to/folder -type d -exec chmod g+s {} +

答案2

独自一人是没有办法做到这一点的chmod。在 zsh 中,您可以利用递归 globbing 和 glob 限定符:

chmod g+ws /path/to/folder/**/*(/)

在 ksh 中,您可以执行此操作,但它也会对目录的符号链接进行操作。

set -o globstar
chmod g+ws /path/to/folder/**/*/

在 bash 中,您可以执行此操作,但它还会在递归下降期间遍历目录的符号链接。

shopt -s globstar
chmod g+ws /path/to/folder/**/*/

您可以在目录上使用默认 ACL 来使文件可由组写入,而不是在目录上使用 setgid 位。

setfacl -d -m g:somegroup:rwx /path/to/folder/**/*(/)
setfacl -m g:somegroup:rwx /path/to/folder/**/*(/)

相关内容