单向同步目录,但在目标上删除已删除的文件

max*_*zig 7 rsync synchronization

我想在两个系统之间同步一个目录。为了使它更有趣,同步必须只在一个方向上完成,即:

  • 如果文件在源目录中被删除,则它也必须在目标目录中删除,如果之前已传输
  • 目标目录中已删除的文件一定不能在源中删除
  • 部分传输的文件(例如由于网络问题)必须在下一次同步时完成
  • 源目录中的新文件必须传输到目标
  • 目标目录中已删除的文件不得重新传输

这意味着源系统基本上具有主控角色,只是不会强制返回目标中已删除的文件。

两个 Linux 系统都有 rsync/ssh/scp 可用。

源目录中的新文件以一种可以使用它们的 mtime 来检测它们的方式创建,例如:

if mtime(file) > date-of-last-sync then: it is a new file that needs to be transfered
Run Code Online (Sandbox Code Playgroud)

此外,源目录中的现有文件不会更改,即同步不需要检查已经(完全)传输的文件中的差异。

Pau*_*ska -1

Rsync 将完全按照您的要求进行操作rsync -a --delete-x如果您需要 xattrs,例如对于 selinux,请添加)。

Rsync永远不会删除源中的文件,但--delete会删除目标中源中不存在的所有文件。

它将通过增量更新机制更新部分传输的文件。AFAIR rsync 将首先检查 mtime(+文件大小),并且仅当存在不匹配时才会完成指纹识别和增量更新。

  • 这将重新传输从目标目录中删除的文件,OP 表示这是不合适的。 (3认同)