强制 rsync 覆盖目标处的文件,即使它们较新

强制 rsync 覆盖目标处的文件,即使它们较新

我运行了一个 rsync 备份脚本,当我询问时,它也会将文件恢复到它们来源的位置。但是,如果当我尝试恢复时目标中的文件比备份中的文件新,则它不会替换它们。我真的想用备份中的文件替换较新的文件,但我没有找到让 rsync 执行此操作的方法。

tldr:有没有办法强制 rsync 覆盖目的地的文件?

编辑:我一直在运行rsync -avhp当我想恢复备份时,我使用相同的命令,但交换了“to”和“from”。因此它尝试将文件从备份驱动器复制到我的计算机上它们所属的位置。

答案1

手册说:

-I, --ignore-times   don't skip files that match size and time

更多详细信息:

-I, --ignore-times

通常,rsync 将跳过任何已经相同大小且具有相同修改时间戳的文件。此选项关闭这种“快速检查”行为,导致所有文件都被更新。

这也可能有用(感谢阿提拉指出这一点):

--checksum, -c   skip based on checksum, not mod-time & size

这改变了 rsync 检查文件是否已更改并且需要传输的方式。如果没有此选项,rsync 将使用“快速检查”(默认情况下)检查发送方和接收方之间每个文件的大小和上次修改时间是否匹配。此选项更改此设置以比较具有匹配大小的每个文件的 128 位校验和。生成校验和意味着双方将花费大量磁盘 I/O 来读取传输中文件中的所有数据,因此这会显着减慢速度(这是在传输已更改文件时进行的任何读取之前) )

发送方在进行文件系统扫描以构建可用文件列表时生成校验和。接收方在扫描已更改的文件时生成其校验和,并对与相应发送方文件大小相同的任何文件进行校验和:选择大小或校验和已更改的文件进行传输。

请注意,rsync 始终通过检查文件传输时生成的整个文件校验和来验证每个传输的文件是否在接收端正确重建,但自动传输后验证与此选项的之前无关。 the-transfer “这个文件需要更新吗?”查看。

使用的校验和是在客户端和服务器之间自动协商的,但可以使用 --checksum-choice (--cc) 选项或该选项部分中讨论的环境变量来覆盖。

--delete如果您想删除源目录中不存在的目标文件,值得一提的是该标志。

另一个有用的选项是它-n只是模仿 rsync 所做的事情,而无需任何实际的复制或删除。仅列出。当您不能 100% 确定自己在做什么时非常有用。

相关内容