rsync 仅保留已从源中删除的文件

rsync 仅保留已从源中删除的文件

我们使用 rsync 将文件系统内容从一台机器复制到另一台机器作为备份。我们首先使用 --delete 和 --delete-excluded 开关运行 MACHINE-X->MACHINE-Y rsync 进行直接备份我们还使用任一删除标志在 MACHINE-Y 目标和 MACHINE-Y 上的另一个文件夹之间运行内部 Rsync。如果有人无意中删除了 MACHINE-X 上的文件,这将保留一份非破坏性副本。但是,它还需要对已同步的内容进行完整复制。

理想情况下,我希望能够以这样的方式运行非破坏性 rsync,即目标仅接收已删除的文件,从而避免不必要的重复。有什么办法吗?

答案1

您可以使用它-i --dry-run来获取两个文件夹之间的更改列表,然后仅保留已删除的文件。

但是,大多数人使用 进行备份时,rsync首先执行rsync,然后cp -al将备份数据(例如current)复制到不同的目录(例如archive)。该-l参数告诉不要复制数据,而只是创建硬链接。这样,您可以在和cp下使用相同的数据,但每个文件仅占用一次磁盘空间(例如,没有您现在遇到的开销)。currentarchive

稍后,只要您将rsync服务器恢复到currentrsync就会更新 中所有已更改的文件并删除已删除的文件。archive但是 中的文件将不受影响。

当然,您可以archive根据需要创建任意数量的文件夹。另请注意,rsync提供了--link-dest选项,可以archiversync运行过程中自动创建文件夹,而无需运行cp -al。有关更多信息,请参阅手册页。

答案2

你可以做得更简单:

find dir1 | ssh host2 " \
  cat > tmpfile1 ; \
  find dir2 > tmpfile2 ; \
  join -a1 tmpfile1 tmpfile2 | \
  xargs rm -rf ; \
  rm tmpfile1 tmpfile2"

至少这是没有 rsync 的普通 shell......

相关内容