我们最近将所有文件复制到了新的存储服务器。当时我们不想搬家,因为我们不确定文件是否会丢失。
现在的问题是我们在两个地方都有文件。
我们如何才能只移动目标中不存在的文件,并从源中删除两个地方都存在的文件?它是 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 命令的语义是倒退的。
我只是设置了一组源目录和目标目录并向自己证明了这一点,因为没有文档解释“排除较新”的真正含义。更新什么?更新来源?更新目的地?什么?
证明:
进行复印。
编辑 NEWDIR 中的文件并赋予其新的时间戳。
使用 /XO 再次进行复制。NEWDIR 中文件的新时间戳将保留。
使用 /XN 再次进行复制。NEWDIR 中文件的新时间戳将恢复。
答案4
robocopy 很好,但我发现如果文件已存在于目标中,/move 选项似乎不起作用。/IS 和 /IT 标志旨在解决此问题,但对我来说它们不起作用,robocopy 只是忽略它们(ymmv)。作为一种解决方法,您可以创建一个新的目标目录,然后在复制完成后将其移动到主目标区域。