比较对象
两侧都是文件夹 → 目录比较;两侧都是文件 → 文件比较。左侧是基准,箭头方向表示“把差异复制到哪一侧”。
用法与说明
目录比较:把两个文件夹分别放到左右两侧 → 自动递归对比 → 点行尾的
→ 把该文件覆盖到右侧 → 最后「导出右侧结果 ZIP」或直接写回磁盘。
文件比较:两侧各选一个文件,或在上面的目录列表里点文件名进入;逐行对齐显示差异,
中间栏的箭头可以按“块”复制,配合 Alt+→ /
Alt+← 更快。
三种“放进文件夹”的方式
| 方式 | 能否写回磁盘 |
|---|---|
| 把文件夹拖进页面 | 可以。浏览器会把目录句柄交给我们,第一次复制时弹一次授权确认 |
| 可写文件夹… 按钮 | 可以。授权后复制结果直接落盘,覆盖磁盘上的同名文件 |
| 选择文件夹 按钮 | 不行。只能读,复制结果在内存里合并,最后导出成 ZIP |
写回能力依赖浏览器的 File System Access API(Chrome / Edge 86+ 支持,Firefox、Safari 暂不支持)。 没有写回权限时,工具把改动记在内存里,最后打包成 ZIP 给你下载,效果一样,只是多一步解压。
快捷键
| 按键 | 作用 |
|---|---|
| Alt+↓ / ↑ | 跳到下一处 / 上一处差异 |
| Alt+→ | 把当前差异复制到右侧 |
| Alt+← | 把当前差异复制到左侧 |
| Ctrl+Z | 撤销上一步复制 |
| Esc | 从文件比较返回目录列表 |
它是怎么算出差异的
- 行级:Myers 差分算法(1986 年那篇论文里的线性空间变体),先把每行内化成整数编号再比较, 所以几十万行的文件也只要上百毫秒;两个文件完全不同的极端情况会触发步数预算, 退化成“整块替换”并在结果里如实标注,不会假装算出了最小差异。
- 行内:对“改写”的行再做一次词级差分——中文按字切、英文单词成块、标点单独成块, 所以只有真正变了的那几个字会被高亮,而不是整行刷红。
- 相同判定:先比大小,大小不同直接判定为不同;大小相同再分块逐字节比较, 第一处不同就立刻停止,既准确又不用读完整个文件。超过 8 MB 的文件按 1 MB 分片流式比较,不会把两个大文件同时读进内存。
- 忽略规则(大小写 / 行尾符 / 行尾空白 / 所有空白)只影响“算不算相同”, 显示的始终是文件里的原始内容,复制走的也是原始字节。
文本编码
自动识别 BOM(UTF-8 / UTF-16 LE / BE);没有 BOM 时先按 UTF-8 严格解码,失败再退回 GBK, 所以中文 Windows 记事本存出来的文件也能正确显示。 复制整份文件时是逐字节复制,不会重新编码;只有“按块复制”需要重新生成文本, 此时若原文件是 UTF-16 或 GBK,工具会先检查新内容能否用原编码表示,不能就明确提示,而不是悄悄写坏文件。
能力边界与已知限制
- 只做复制与覆盖,不做删除。工具里没有任何“删除对侧多余文件”的入口,这是有意的: 浏览器里删文件无法撤销,风险不该由一次误点承担。需要镜像同步请用专业工具。
- 二进制文件(含 NUL 字节)不展示逐行差异,只比字节是否相同,但可以整份互相复制。
- 不做三路合并、语法高亮、图片差异、FTP/SFTP 与云盘连接、保存比较会话。
- 目录比较默认递归全部子目录;文件数量很多(上万)时首次比较需要几秒钟,期间可以中断。
- 内存里只保留当前正在看的文件内容,目录里其它文件按需读取,所以比较 1 GB 的目录也不会吃掉 1 GB 内存。
说白了:能覆盖的都会真的覆盖(有写回权限时),覆盖不了的一定让你拿到 ZIP, 不存在“看起来成功了其实没写进去”的情况——每次写盘都会单独报告成功或失败。