我有一个 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 视为新的源文件夹。