chmod 和 chown 同时?

use*_*394 9 bash permissions shell-script ownership

我正在运行一个脚本来修复 rsync 后的文件所有权和权限。的最佳方式做我的任务预留的问题,我想知道,有没有一种方式来运行chmod,并chown在同一时间?

在我的脚本的当前迭代中,我find两次处理文件。

find /var/www/mysite -exec chown  www-data:www-data {} \;
find /var/www/mysite -type f -exec chmod 775 {} \;
Run Code Online (Sandbox Code Playgroud)

我认为如果我可以使用单个命令更改权限和所有者/组会很好。在谷歌搜索之后,我惊讶地发现这样的命令、参数或选项不存在。

我可以同时更改权限和所有权,以避免find对每个文件重复两次吗?

编辑社区编辑或帖子或其他内容表明此问题与“使用 1 个命令更改所有文件夹权限”重复。这个问题是不同的,因为它要求同时更改权限 所有权,而不仅仅是权限。

jes*_*e_b 17

您可以传递多个 exec 命令:

find /var/www/mysite -exec chown www-data:www-data {} \; \
     -type f -exec chmod 775 {} \;
Run Code Online (Sandbox Code Playgroud)

  • @ user394 不,你不能,因为每个谓词(`-type`、`-exec` 等)都是一个 _test_,并且它们之间有一个逻辑 AND(隐式)。您可以使用 OR (`-o`) 和括号计算逻辑。可能类似于 `\( -type d -exec chmod g+s {} \; \) -o \( -type f -exec chmod 775 {} \; \)` 等。 (8认同)
  • @ user394 在 Jesse 的代码中,`chmod` 只会对前面的 `chown` 成功的常规文件(`-type f`)执行。如果`chown` _fails_,`-type f` 等不会发生,而是考虑下一个找到的东西。(这就是 `-exec` 可以被视为测试的方式)。 (8认同)

Fre*_*ddy 10

您可以将等效选项添加到您的rsync命令中:

rsync <your_options> --chown www-data:www-data --chmod=F775 <source> <destination>
Run Code Online (Sandbox Code Playgroud)

您可以F--chmod文件和D目录中使用前缀。