![控制创建的目标目录的文件模式是否可以用于rsync?](https://linux22.com/image/163424/%E6%8E%A7%E5%88%B6%E5%88%9B%E5%BB%BA%E7%9A%84%E7%9B%AE%E6%A0%87%E7%9B%AE%E5%BD%95%E7%9A%84%E6%96%87%E4%BB%B6%E6%A8%A1%E5%BC%8F%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E7%94%A8%E4%BA%8Ersync%EF%BC%9F.png)
我希望控制以下命令directory-to-be-created
中的文件模式位rsync
:
rsync -a ... <remote-user>@<remote-host>:/some/existing/path/directory-to-be-created/
正如名称所暗示的那样,该目录尚不存在,rsync
需要创建它;它尽职尽责地这样做......然而,据我所知总是这是否符合<远程主机>的默认设置umask
,--chmod=...
我无法理解的咒语不会让它做其他事情......
那么是否可以设置创建丢失目标目录的文件模式,如果可以,如何设置?
答案1
rsync
本身可能不支持该功能,但您可以使用文件系统ACL确保下面任何新创建的目录都/some/existing/path/
具有一组特定的权限。例如:
$ setfacl -dm u::rwx,g::rx,o::r /some/existing/path/
下面新创建的目录现在应该具有手动或通过的/some/existing/path/
权限。750
rsync
答案2
这个答案让我走上正轨--rsync-path=PROGRAM
选项:
--rsync-path=PROGRAM
使用它来指定要在远程计算机上运行什么程序来启动 rsync。当
rsync
不在默认远程 shell 的路径中时经常使用(例如--rsync-path=/usr/local/bin/rsync
)。注意
PROGRAM
在 shell 的帮助下运行,因此它可以是您想要运行的任何程序、脚本或命令序列,只要它不会破坏rsync
用于通信的标准输入和标准输出。一个棘手的示例是在远程计算机上设置不同的默认目录以与该
--relative
选项一起使用。例如:rsync -avR --rsync-path="cd /a/b && rsync" host:c/d /e/
所以看来我只能这样做:
rsync -a --rsync-path='umask 0022 && rsync' ...
...预设umask
(或者事实上,任何rsync
调用远程之前所需的条件:-)