如何强制 rsync 覆盖只读存档文件?

Eon*_*nil 5 permissions rsync

我正在使用rsync复制一些源代码。复制的代码一定不能因为我在代码编辑时的错误而在目标地方修改。所以我设置了--chmod=u-w标志以使其在复制后只读。

 rsync --delete -a --chmod=u-w
Run Code Online (Sandbox Code Playgroud)

首先是运作良好。但是从第二次rsync不能执行复制,因为目的地是只读的。

rsync: delete_file: unlink "/path/file1" failed: Permission denied (13)
rsync: delete_file: unlink "/path/file2" failed: Permission denied (13)
rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-42/rsync/main.c(992) [sender=2.6.9]
Run Code Online (Sandbox Code Playgroud)

我相信有一些功能可以强制rsync覆盖任何文件,无论是只读还是可写。

我怎样才能做到这一点?

Gil*_*il' 5

复制的代码不能在目的地修改

错误:复制的文件必须在目标位置修改,当 rsync 下次运行时。Unix 权限无法表达“只能由 rsync 修改”,除非您以专用用户身份运行该 rsync 作业。

Rsync 无法删除这些文件,因为包含它们的目录是只读的。为避免这种情况,请添加F前缀以--chmod仅应用于常规文件。

rsync --delete -a --chmod=Fa-w
Run Code Online (Sandbox Code Playgroud)

不更改文件权限可能会更好地为您服务。如果您需要提供对文件的只读访问权限,请以专用用户身份运行 rsync 作业,并授予其他用户对该目录树的只读权限(--chmod=go-w可能会有所帮助)。或者,在只读视图中公开目录树,例如使用bindfs(有关不同场景中的用法示例,请参阅此答案)。