rsync --no-perms 仍然保留权限并忽略 umask

rsync --no-perms 仍然保留权限并忽略 umask

我正在尝试使用https://unix.stackexchange.com/a/315667/21372使用 rsync 解决 cp bug 的方法,但我无法让它工作。本质上,我需要使用rsync类似的方式递归复制文件或目录rsync -a,但使用正常的 umask 条件创建文件和目录。但在单个文件上尝试此操作表明,即使我指定了该--no-perms选项,它仍然保留对目标文件的权限:

bash-4.1$ cd /tmp
bash-4.1$ touch afile
bash-4.1$ chmod a-w afile
bash-4.1$ ls -ld afile
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile
bash-4.1$ rsync --copy-links --recursive --times --group --no-perms afile afile2
bash-4.1$ ls -ld afile*
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile2
bash-4.1$ 

我想要的是具有与正常创建afile2相同的权限:afile3

bash-4.1$ touch afile3
bash-4.1$ ls -ld afile3
-rw-rw-r-- 1 theuser thegroup 0 Jul 24 16:51 afile3

我可以使用“harsh”查找命令,如下所示https://unix.stackexchange.com/a/315667/21372但我宁愿没有后续 find 命令的开销来执行我认为 rsync--no-perms选项应该执行的操作。

这需要在用户空间中工作(不需要root)。

这是 rsync 错误还是用户错误?

涉及的操作系统和 rsync 版本是:

bash-4.1$ lsb_release -r -i
Distributor ID: RedHatEnterpriseWorkstation
Release:    6.8
bash-4.1$ rsync --version
rsync  version 3.0.6  protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
bash-4.1$ 

答案1

从 rsync 手册页:

要为新文件提供目标默认权限(同时保持现有文件不变),请确保 --perms 选项关闭并使用 --chmod=ugo=rwX (这可确保启用所有非屏蔽位)。

所以...

rsync --copy-links --recursive --times --group --no-perms --chmod=ugo=rwX afile afile2

...应该用您展示的示例文件来解决这个问题。

如果源文件具有权限,例如 777...

rsync --copy-links --recursive --times --group --no-perms --chmod=ugo=rw,-X afile afile2

...将删除可执行标志。

答案2

我想在没有所有权和权限保存的情况下复制目录并使用特定的umask.并遇到同样的问题。我还想保留可执行位(但没有其他权限)。阅读man rsync我得到了与@cmerriman类似的结果

rsync -rEltDHv --chmod=ugo=rwX src_dir/ dst_dir/

与其他答案的一个主要区别是-E保留了执行位。除此之外,magix 似乎是按照--chmod=ugo=rwX手册页中建议的方式完成的。

相关内容