如何仅在子目录上进行 chmod?

B F*_*ley 8 bash permissions chmod recursive

给定以下目录树:

.
??? d1
?   ??? workspace
??? d2
?   ??? workspace
??? d3
?   ??? workspace
??? d4
?   ??? workspace
??? d5
    ??? workspace
Run Code Online (Sandbox Code Playgroud)

我需要为所有workspace目录设置权限, 如下所示:

chmod -R 774 d1/工作区
chmod -R 774 d2/工作区
...

如何在一个命令中对所有workspace目录执行上述操作?我可以运行以下命令:

chmod -R 774 *

但这也改变了父目录的模式,这是不希望的。

Tho*_*mas 17

您可以在顶级目录中使用通配符。

chmod 774 d*/workspace
Run Code Online (Sandbox Code Playgroud)

或者为了使其更具体,您还可以限制通配符,例如d后跟一个数字。

chmod 774 d[0-9]/workspace
Run Code Online (Sandbox Code Playgroud)

更通用的方法可能是使用find.

find d* -maxdepth 1 -name workspace -type d -exec chmod 774 "{}" \;
Run Code Online (Sandbox Code Playgroud)

  • 也许将 `-type d` 添加到你的 `find` 命令中? (4认同)

G. *_*pen 6

chmod命令有一个很好的快捷方式,用于仅在目录上设置可执行位,如下所示:

chmod a+X *
Run Code Online (Sandbox Code Playgroud)

这非常方便,可以使整个目录树可供任何人读取,但不会在任何常规文件上设置可执行位:

chmod -R a+rX *
Run Code Online (Sandbox Code Playgroud)

  • “X”在目录*和任何设置了可执行位的文件上设置可执行位。一般来说,这没有多大区别(因为可执行文件通常为每个人都设置了位),但在某些情况下可能很重要。另请注意,使用此技巧无法获得模式 774。 (3认同)