使用 rsync 删除目标上已存在的源文件

使用 rsync 删除目标上已存在的源文件

我有一个 cron 作业,用于rsync定期将服务器 A 上特定目录中出现的所有文件传输到服务器 B 上的某个位置。我使用--partial和 ,--append-verify因为文件很大。我还使用该remove-source-files选项在传输文件时删除服务器 A 上的文件。根据手册页,rsync仅在特定运行中完成所有文件传输后才删除源文件。

这在大多数情况下都可以正常工作,除非在传输了一些文件后由于网络故障导致传输中途中断。在下次运行时,程序会看到目标中已存在一些文件,并正确确定它们不需要重新传输。但是,由于它们不是传输运行的一部分,因此源服务器中的文件不会被删除。随着时间的推移,它们逐渐增多。

如果源文件存在于目标中,有没有办法rsync在后续运行中删除它们,或者我必须通过编写自己的脚本来解决这个问题?

答案1

老实说,这并不是一个真正的答案,因为这是一种获取您所请求的结果的黑客方式。所以这里是:

如果删除该--append-verify命令并将其替换为该--update命令,请保留所有其他选项并在没有它的情况下运行 RSYNC。

这将删除所有源文件,同时复制已修改的文件。

答案2

我最近发现了一个简单的方法:

rsync -rav --remove-source-files --backup-dir=<BAK> <SRC> <DST>

DST 中存在并被检测为“已更改”的所有文件都将移至 BAK - 现在您可以删除 SRC 文件夹并将 BAK 视为新的源文件夹。

相关内容