从源中删除重复文件,在 Robocopy 中仅将丢失的文件移动到目标

从源中删除重复文件,在 Robocopy 中仅将丢失的文件移动到目标

我们最近将所有文件复制到了新的存储服务器。当时我们不想搬家,因为我们不确定文件是否会丢失。

现在的问题是我们在两个地方都有文件。

我们如何才能只移动目标中不存在的文件,并从源中删除两个地方都存在的文件?它是 Windows Server 2008。

答案1

使用 Beyond Compare 之类的比较工具。它可以比较文件夹并显示文件夹和子文件夹中存在和不存在的文件。此外,它还会显示两个位置上存在的文件之间是否存在任何差异。Beyond Compare 还可以将文件从一个文件夹复制和/或移动到另一个文件夹。

答案2

robocopy %Files% %Bak% /E /ZB /MOVE /IS /COPY:DATSOU

您不仅需要/MOVE,您还需要/IS(包括相同的)文件。

否则,当 Robocopy 发现两个位置都有相同的文件时,它就不会复制该文件。

如果您告诉它“包含相同”,它会在两个位置看到相同的文件,并且仍然从源复制该文件,并像预期的那样从源中删除它。

答案3

robocopy OLDDIR NEWDIR /S /XO

这样 NEWDIR 中将保留较新的文件。NEWDIR 中相同或较旧的文件将被覆盖。

robocopy OLDDIR NEWDIR /MIR /XO

这与上述操作类似 - 注意删除多余的文件。

/XO 命令的语义是倒退的。

我只是设置了一组源目录和目标目录并向自己证明了这一点,因为没有文档解释“排除较新”的真正含义。更新什么?更新来源?更新目的地?什么?

证明:

  1. 进行复印。

  2. 编辑 NEWDIR 中的文件并赋予其新的时间戳。

  3. 使用 /XO 再次进行复制。NEWDIR 中文件的新时间戳将保留。

  4. 使用 /XN 再次进行复制。NEWDIR 中文件的新时间戳将恢复。

答案4

robocopy 很好,但我发现如果文件已存在于目标中,/move 选项似乎不起作用。/IS 和 /IT 标志旨在解决此问题,但对我来说它们不起作用,robocopy 只是忽略它们(ymmv)。作为一种解决方法,您可以创建一个新的目标目录,然后在复制完成后将其移动到主目标区域。

相关内容