如何从新的 rsync 副本中排除以前删除的文件?

如何从新的 rsync 副本中排除以前删除的文件?

延伸一下这个问题:

插入 USB 时自动将文件夹同步到 USB?

我不需要自动脚本,只需要一个小型 bash 脚本来执行以下操作:

  • 将当前文件夹复制~/Documents/到备份文件夹
  • 将较新的文件从 USB/Documents 复制到~/Documents/
  • 复制并延续删除~/Documents/内容USB/Documents/

我现在有:

# Backup local:
rsync -av ~/Documents/ ~/backup20112012/Documents/

# Synch new files from USB:
rsync -auv /media/20CC-A5E5/Documents/ ~/Documents/

# Sync and delete USB:
rsync -av --delete ~/Documents/ /media/20CC-A5E5/Documents/

该方法有效,但有一个例外。如果我删除 ~/Documents 中的文件,则在步骤 2 中会再次创建该文件(因为它在 USB 上)。有没有办法省略复制在步骤 2 中删除的文件?

答案1

您的要求有点奇怪。您似乎想要同步~/Documents和,USB/Documents以便它们具有相同的内容。如果是这样,请使用齐奏 安装 unison,这是您寻找双向时的首选工具rsync

答案2

如果您想删除 USB 上但不在 PC 上的所有文件,那么我相信您可以这样做:

# deletes any files that are on the USB that are not on the PC and synchronizes any files that have been changed more recently on the PC then on the USB.
rsync -auv --delete ~/Documents/ /media/20CC-A5E5/Documents/
# synchronizes files that are newer on the USB then on the PC
rsync -auv /media/20CC-A5E5/Documents/ ~/Documents/

第一个命令使用 -u,则不会覆盖 USB 和 PC 上的任何文件;使用 --delete,则会删除 USB 上所有不在 PC 上的文件。然后第二个命令会将 USB 与 PC 同步。

这样做的一个缺点是,USB 上的所有文件(PC 上没有)都将被删除。不过,我认为这正是你想要的。如果你在 USB 上创建了 PC 上没有的新文件,USB 上的新文件将被删除。如果你删除 PC 上的任何文件,USB 上的文件也会被删除。

从您的需要来看,我认为这还不够,但这是使用 RSync 可以做的最多的事情。

如果您只想删除 USB 上已在 PC 上删除的文件,而不删除 USB 上从未在 PC 上出现过的文件,那么您必须创建某种程序,记录每次删除 PC 上的文件,然后只删除 USB 上的文件。这可能比您想要投入的要复杂得多,工作量也大得多。

相关内容