有没有办法告诉 rsync 在同步过程中跳过其当前文件,也许通过向它发送特定信号?
我已经知道基于模式的忽略,但这有时对我来说很方便。
答案1
我不熟悉这样的功能,手册页当前版本也没有提及。除了浏览源代码以查找手册页中未提及的“隐藏功能”外,我认为可以安全地假设不存在此类功能。
不过,我同意这听起来像是一个方便的功能。
答案2
遗憾的是,答案是“不”,但有一个错误报告在 rsync Bugzilla 中请求此增强。也许有一天……
答案3
我总是终止 rsync(control-c)并使用 --exclude 选项(可能还有 --delete)重新运行。由于 rsync 保留目标目录的部分更新,因此第二次运行应该会更快,因为您基本上可以从上次中断的地方开始。
您可能还查看了大文件的 partial-dir 选项。
答案4
这rsync 功能请求@dean-serenevy 提到的有一个解决方法:
- 如果仍然需要,请备份源文件,例如
cp --reflink=always --preserve largefile largefile.backup
- 截断文件:
echo > largefile
- 等待 rsync 检测到错误。这可能需要一段时间,但 rsync 至少应该停止向目标文件写入更多数据。检测到错误后,rsync 将重试,发现文件短了很多(1 个字节长,一个换行符),并更新目标以匹配它。
- 恢复备份:
mv largefile.backup largefile
如果 inode 编号无关紧要,cat largfile.backup > largefile
如果 inode 编号必须保持不变(以暂时需要两倍空间为代价)。还应考虑所有权、权限、扩展属性、稀疏性和特殊的文件系统功能,例如压缩和重复数据删除。