我有一个目录,里面有很多 PDF 格式的书籍(大约 2GB 大小)。
在阅读时,我经常在文件中留下注释和注释。有时我会在外部硬盘驱动器上进行备份。由于我不记得自上次备份以来修改了哪些文件,所以我只是复制并覆盖了整个文件。
Windows 是否在覆盖之前检查同名文件是否相同(按内容)?如果没有,我将如何做到这一点?
我有一个目录,里面有很多 PDF 格式的书籍(大约 2GB 大小)。
在阅读时,我经常在文件中留下注释和注释。有时我会在外部硬盘驱动器上进行备份。由于我不记得自上次备份以来修改了哪些文件,所以我只是复制并覆盖了整个文件。
Windows 是否在覆盖之前检查同名文件是否相同(按内容)?如果没有,我将如何做到这一点?
机械复制。
如果您使用Windows 资源管理器进行复制,Windows 无法区分相同文件和已修改文件。
如果您使用Robocopy进行复制, Windows可以区分相同文件和修改后的文件,Robocopy是 Windows(Vista、7、8.1 和 10)中包含的文件复制实用程序。
无需使用第三方工具。
您可以将此脚本保存为批处理文件,并在您想要执行备份时重新运行它:
robocopy /e c:\PDFs p:\PDFs
/e
(或)开关,但如果您想包含子文件夹,请使用. 如果要包含子文件夹和空子文件夹,请使用./s
/s
/e
那个简单的脚本就是你所需要的。
Windows 不这样做。但是,它会提示您覆盖具有相同名称的文件,如果您想这样做,您可以手动选择。
要获得更简单的解决方案,请使用FreeFilesSync比较文件夹并仅覆盖更改/更新的文件(镜像选项并
File time and size
在比较设置中选择)。是和不是!Windows 资源管理器仅检查元数据(文件大小、日期等)。
但是您可以使用脚本,例如powershell(请参阅此处),它与(大多数)Windows 或3rd 方工具一起使用 ,让您可以使用文件校验和(例如 MD5 或 SH1 哈希)比较/复制文件(请参阅此处和/或使用搜索引擎)。
我自己喜欢使用软件校验和比较(见这里),它可以让你比较文件和目录,包括文件校验和,它可以在 USB 笔式驱动器上工作。
如果您不需要比较文件的内容并且只想复制“较新”的文件,您可以使用任何高级复制方法,例如xcopy、robocopy 等。
注意:不同的散列方法有优缺点(主要是可靠性与速度)。对我来说,MD5 对于这种类型的文件比较来说绰绰有余,但这是个人喜好。有关该主题的更多信息,请参见此处。
简而言之:没有
Windows 并没有以一种直接的方式来解决这个问题。
好吧,确实如此,但就像 Windows 中的所有内容一样,它充其量也是模棱两可的。系统将提示您名称冲突,并且根据您的 Windows 版本,您会得到一个或多或少可以理解的对话框,其中包含多个选项可供选择,并带有附加说明(“Blah blah,不同大小,较新”)。然后,您可以一一选择是否保留修改后的文件,并且您可以选择将其应用于所有“相同”匹配项。
现在当然是 Windows,所以你不能保证“更新”实际上意味着更新,并且你不知道什么是“相同”(只是名称冲突,是大小变化,是修改日期,还是这就是一切吗?)。
备择方案
有各种各样的文件同步程序,包括免费的和商业的,它们在覆盖文件之前检查文件是否被修改过,它们是传统的万能工具之母,但用户也少一些。
rsync
- 比某些人可能希望的友好。但是,我不推荐任何这些,因为它们并没有从根本上使事情变得更好。
就个人而言,如果您不怕一点命令行(总是可以制作批处理文件!),我会推荐 Matt Mahoney 的出色zpaq。这基本上是 ZIP,除了它压缩得更好,而且它可以即时执行重复数据删除。
怎么这么好?
好吧,校验和比较工具都很好。尤其是当你通过网络时,没有什么能比
rsync
在两端运行,这真是太棒了。但是,虽然一个典型的同步工具可以很好地完成这项工作(并且比 Explorer 更好),但这并不是它最擅长的。无论您是否比较校验和,写入外部驱动器都需要处理以下几点:
为了比较校验和,您首先必须读入文件。句号。这意味着对于几千个文件,您需要为遍历目录结构、通过高延迟链接打开文件以及读取文件数千次的延迟付出代价。另外,通过高延迟线以小单元传输它们。好吧,这很浪费时间,这是一个非常昂贵的过程。
然后,你必须写入已经改变的文件,再次进行几个高延迟的操作,例如打开文件,覆盖数据,并再次一个一个。这很糟糕,因为它不仅本质上是不安全的(如果你的猫在 USB 电缆上绊倒,你会丢失被覆盖的文件),而且对于现代的叠瓦式硬盘驱动器(例如许多外部驱动器),它可能会非常缓慢,低至单一 -如果你不走运,每秒兆字节。那,以及数千次小传输的延迟加起来。
一个编写良好的文件复制工具可能能够通过复制一个临时文件来处理安全问题,然后自动重命名它(但这会增加更多开销!)。
现在,像 zpaq 这样的存档格式将创建一个包含文件校验和的存档,可以从一个位置快速顺序地读取它们。然后它在本地(本地意味着“在您的电缆一侧”,您可能有一个通过 SATA 或 M.2 或其他东西连接的相当快的磁盘)比较校验和,压缩差异,并仅追加将压缩数据顺序写入现有档案。是的,这意味着档案会随着时间的推移而增长一点,因为你携带了整个历史。唉,克服它,由于差异和压缩,成本非常适中。
这种方法更快,同时也更安全。如果您在操作过程中拉动电缆,您当前的备份将被中断(显然!)。但是您不会丢失以前的数据。通过“慢速”链接的所有事务都是严格顺序的、大传输的,这可以最大限度地提高吞吐量。
XCOPY/D 只会在源比目标更新时复制文件。(XCOPY/S/D 用于递归复制)
微软同步玩具
Microsoft 制作了一个很棒的 Windows PC 应用程序,称为 SyncToy,您可以在其中指定“左文件夹和右文件夹”对,并选择从左到右响应更改,从左到右贡献更改而不删除右,或在左右之间同步。有一个用于在提交前预览更改的用户界面。
如果一个文件被检测为相同,它将被跳过,这是您正在寻找的功能。
大约 10 年来,我一直在使用 Echo 模式将桌面 PC 的更改逐步镜像到外部驱动器。
https://www.microsoft.com/en-us/download/details.aspx?id=15155