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

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

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

 rsync --delete -a --chmod=u-w

首先是运作良好。但从第二次开始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]

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

我怎样才能做到这一点?

答案1

复制的代码不得在目的地进行修改

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

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

rsync --delete -a --chmod=Fa-w

不更改文件权限可能会给您带来更好的服务。如果您需要提供对文件的只读访问权限,请以专用用户身份运行 rsync 作业,并授予其他用户对该目录树的只读权限(--chmod=go-w可能有帮助)。或者,在只读视图中公开目录树,例如绑定文件系统(看这个答案不同场景下的使用示例)。

相关内容