比较与同步
当你保留着同一文件夹的两个副本时——一个工作文件夹和一个备份、一台笔记本电脑和一个网络共享、一个项目和它的存档——Peach Commander 帮助你精确地看清有哪些改动,并让两边重新保持一致。你可以同步两个目录,逐行比较单个文件,并在需要精确到最后一个字符的确定性时逐字节检查文件。
同步两个目录¶
- 在左侧面板中打开你想同步的文件夹,在右侧面板中打开用来与之比较的文件夹。
- 选择 命令 ▸ 同步目录…。两个文件夹路径会从你的面板中填入。
- 设置比较的彻底程度:包含子文件夹、按内容比较(而不仅仅按日期和大小),或忽略修改日期。
- 如果你只想同步特定文件,可添加一个过滤掩码(例如
*.jpg;*.png)。 - 查看结果网格。每一行左侧显示一个文件,中间是一个方向箭头,右侧是匹配的文件。箭头会告诉你将发生什么:→ 将左侧复制到右侧,← 将右侧复制到左侧,= 表示两者完全相同。
- 如果你不认同某条建议的方向,可调整单独的行,然后单击同步按钮以执行更改。
(图:同步目录窗口比较两侧,并为每个文件建议一个复制方向。)
右键单击某一行即可查看其背后的文件。比较将两侧并排打开,而查看左侧文件和查看右侧文件则在查看器中单独打开一侧——对于只存在于一侧、无从比较的行,这正是答案。不适用于所单击行的条目会变灰,而不是毫无反应。.zip 内或服务器上的文件会先解压或下载为一份只读的临时副本,因此原件绝不会被改动。 这同样适用于比较,因此可以把一个文件夹与压缩包或服务器作比较——而对于这样一侧,合并与保存按钮保持关闭,因为那里打开的是副本。
按内容比较两个文件¶
- 在每个面板中各选择一个文件(或在同一面板中选择两个文件)。
- 选择 文件 ▸ 按内容比较…。
- 两个文件会并排打开,差异部分高亮显示。使用下一处/上一处控件在改动块之间跳转。
- 如果你开启编辑模式,就可以直接调整任一文件并保存你的更改。
(图:比较两个文本文件;两侧的改动行都高亮显示。)
当两个文件完全没有差异时,窗口会在顶部用一条彩色横幅明确说明,而不是让你从一张毫无高亮的表格里自行推断。当某个文件根本无法读取时,横幅也会以警示色出现——此时任何关于差异的结论都会是对一次从未发生的比较所作的断言。逐字节比较出于同样的原因给出同样的说法:两个打不开的文件并不是两个相同的文件。
逐字节比较文件¶
当两个文件看起来相同但你需要证明它们确实完全一致(或找出那一个不同的字节)时,请使用二进制比较。它以十六进制视图显示两个文件,并标记不匹配的字节,非常适合验证下载内容、检查编码数据,或确认一份精确的副本。
比较目录列表¶
若要一眼看出两个打开文件夹之间的差异,请选择 选择 ▸ 比较目录(Shift+F2)。Peach Commander 会标记出在另一侧存在差异或缺失的文件,以便你用常用的复制、移动和删除命令对它们进行操作。
限制同步的范围¶
掩码字段是一份针对文件名的包含列表。它表达不了的情况,旁边的 筛选… 会打开一个带三个标签页的工作表。在那里设置的内容对下一次比较生效,按钮随后会显示有几个条件在起作用——看不见的筛选条件,正是备份最终不完整而窗口却报告已完成的原因。
- 排除 接受以
;或|分隔的模式。不含斜杠的名称在任何层级都匹配(*.tmp),末尾的斜杠表示一个文件夹及其全部内容(node_modules/),含斜杠的模式匹配相对路径(src/*/generated)。不区分大小写。 - 大小 与 日期 把一对文件作为整体判断:只要有一侧超出范围,整对都会排除。这是有意的。若只对一侧生效,排除会让这一对看起来只有单侧,从而变成方向错误的复制。
- 最近 N 天内 从每次比较起算,而不是从预设保存时起算,因此保存下来的任务始终表示“最近一个月”。
- 插件 标签页会就文件将从哪一侧复制来询问内容插件。它需要真实文件,因此只有当两侧都是这台 Mac 上的文件夹时才提供。
被排除的文件夹在镜像模式下也不会被删除——镜像只移除它确实比较过的内容。状态行会在本次运行将要做的事旁边,说明筛选条件排除了多少项。筛选条件会随它所属的同步预设一起保存和载入。
让两个文件夹双向保持一致¶
原来的两种模式无法区分一件事:只在一侧存在的文件,要么是这里新增的,要么是那边删掉的,而这两 者看起来一模一样。所以对称模式会把它复制过去——在笔记本上删掉点东西,同步一下,它就从备份里回来了 ——而镜像模式会删除,但只朝一个方向。
双向(带记忆) 会记住两个文件夹上次一致时的样子。有了这份记录,一侧的删除就能带到另一侧。
- 一对文件夹的第一次运行没有记录:它的行为和以前完全一样,不删除任何东西,只写下记录。从第二次 运行起,这个模式才开始起作用。
- 带过来的删除以自己的颜色和
⇒🗑显示,并且没有勾选:它是唯一一行来自应用记忆、而不是来自你在两 个文件夹里能看到的东西,所以由你自己勾上。点箭头可以选择别的答案:把文件复制回来,或者两侧都不动。 - 一侧修改而另一侧删除是冲突,绝不是删除。两侧都修改过的文件 也一样。
- 比较无法确认的“不存在”,不会成为删除的依据——一个读不出来的文件夹,或者一个被过滤器挡下的文件夹, 都不能说明它里面有什么。
- 只支持这台 Mac 上的两个文件夹。不支持服务器,也不支持压缩包:压缩包内的删除会把它整个重写,服务 器上的删除是不可逆的,而这个模式不是拿来试这些的。
删除无法撤销。 在这台 Mac 上文件会进入废纸篓,可以在 Finder 里放回去;这就是全部的安全网。窗口里的 记忆… 会列出应用记住的每一对文件夹,标出你正在看的那一对,并且可以忘记其中任意一对——之后这些文件夹的下一次比较又会像第一次那样。它绝不会自己忘记:未挂载磁盘上的文件夹并没有消失,只是没有接上。
记录与 应用设置放在一起,所以移动其中一个文件夹后,这一对就没有历史了——而没有历史的运行不会删除任何东西。
一次运行做了什么,其中哪些可以收回¶
每一次同步都会被记下来。窗口里的运行记录…按时间从新到旧列出它们——何时、哪两个文件夹、哪种模式,以及有多少文件被复制、删除或被拦下——并显示你所选的那次运行中每个文件的结果。
正是这份清单让废纸篓变得好用。这台 Mac 删除的文件进了废纸篓,而运行记下了它去了哪里,这件事比听上去更要紧:废纸篓在重名时会改名,于是第二个 notes.txt 会以 notes.txt 11-17-15-028.txt 的名字落下,按名字去找会找到错的那个。在废纸篓中显示让访达直接指向该项目。
放回原处…把某次运行删除的文件从废纸篓移回它们被删除时所在的路径。每一个都会先检查,凡是不成立的都会连同理由一起被拒绝,而不是强行执行:
- 那个路径上又有东西了。就此作罢——放回原处绝不允许覆盖。
- 该项目已不在废纸篓里,或者它是被永久删除而不是被放进去的。
- 那一侧是压缩包或服务器。压缩包会被整个重写,服务器没有废纸篓, 因此什么都没有留下。
- 运行写入的那个文件夹不在了,或者已经不是同一个文件夹——比如一个被重新使用的挂载点。这时整次 运行会被拒绝,而不是执行其中的一部分。
- 它已经被放回过了。记录保留着这一点,所以第二次尝试什么也不做。
- 或者记录本身是这个版本无法处理的——由更新版本的应用写下,或者指向两个文件夹之外的路径。少见, 而且宁可拒绝也不去猜。
复制无法收回。 把它移走就意味着删除一个你之后可能已经编辑过的文件,这与把删除放回原处正好是相反的交换,所以应用不提供这个选项——运行会告诉你它复制了哪些文件,你可以自己删除。被覆盖的文件是唯一真正的缺口,而如今这个缺口很小:在这台 Mac 上,被替换掉的那一版会像被删除的文件一样进入废纸篓,因此在废纸篓中显示能找到它。写入压缩包、写到服务器上,或写到没有废纸篓的宗卷上则做不到,确认对话框会在运行前说明这一点。
最近 200 次运行会被保留,或者其中的 64 MB,以先到者为准;超出之后,最旧的会随着新的到来一个一个地退场,而忘记和全部忘记会当场清理它们。一次非常大的运行——超过 20,000 个文件——会保留每一个问题以及它放进废纸篓的所有东西,但不保留顺利完成的复制,并且会明说,而不是留给你自己去发现。它的删除仍然可以放回原处:被省略的是复制,而复制本来也收不回来。
忘记不会改变文件夹里的任何东西;消失的是关于做过什么的记录,以及随之而来的、把东西放回去的提议。与双向记忆不同,这是自动丢弃的——丢掉一对文件夹的记忆会改变下一次运行的行为,而丢掉一次运行的记录只是少了一个提议。
快捷键¶
| 操作 | 快捷键 |
|---|---|
| 比较目录列表(标记有差异的文件) | Shift+F2 |
| 按内容比较 | 文件 ▸ 按内容比较… |
| 同步目录 | 命令 ▸ 同步目录… |
| 查看同步行的其中一侧 | 右键单击该行 ▸ 查看左侧文件 / 查看右侧文件 |
说明¶
- 按内容 vs. 按日期/大小。 快速比较按大小和修改日期匹配文件,速度快,但当相同文件的时间戳不同时可能会被误导。开启 按内容 可获得可靠的结果,代价是读取每一个文件。
- 子文件夹和过滤器。 同步窗口可以深入子文件夹,并可用过滤掩码加以限制,因此你可以只同步你关心的文件类型。
- 一切尽在你掌控。 同步绝不会自行运行——你在结果网格中查看建议的方向,并可在任何内容被复制之前更改其中任意一条。 Esc 会中止正在进行的比较;没有比较在运行时则关闭窗口。
- 预设。 常用的同步设置可以保存并重复使用,这样你就不必每次都重新输入相同的选项。 预设还会记住结果网格显示的内容——方向过滤器和 隐藏相同项——窗口会以你上次使用的预设打开。从第一次打开窗口起就有一个 默认 预设;在其上保存即可把它变成你自己的。