一款完全离线运行的 macOS 重复与相似文件筛选工具
“是否一样”用于在本机文件夹和移动硬盘中查找重复文件、相似媒体、相似文件夹及压缩包内的重复内容。扫描、特征提取、缓存与清理全部在本地完成,不会上传文件、路径、哈希、缩略图或统计信息。
当前版本:0.7.6(个人使用版本) · 最低支持 macOS 14 · 界面语言为中文
- 同时扫描多个文件夹和移动硬盘
- 使用文件大小、分段指纹、完整 SHA-256 和逐字节复核确认内容完全相同的文件
- 识别重新压缩、缩放或旋转后的相似图片
- 通过多个时间点画面识别重新编码、改变分辨率后的相似视频
- 分析 ZIP、TAR、TAR.GZ、RAR 和 7Z 压缩包内部内容
- 查找同一压缩包内、不同压缩包间,以及压缩包与普通文件之间的重复内容
- 识别名称高度相似的第一级文件夹,并跳过其内部文件的重复展示
- 在两个或更多已选位置之间查找重复文件和重复文件夹
- 只比较不同选择位置之间的内容
- 判断重复文件夹时忽略顶层文件夹名称,内部文件名可以不同
- 支持空目录层级,避免只比较文件而漏掉目录结构差异
- “严格、标准、宽松”三级相似度灵敏度,默认使用“标准”
- “节能、平衡、极速”三级性能模式,并根据 macOS 温度状态自动降速
- 自动识别内置 SSD、移动 SSD 和机械硬盘;未识别或识别错误时可在位置库手动指定
- 扫描缓存、扫描历史、扩展名与文件夹排除、文件大小范围
- 每个已添加位置可独立设为“保护位置”:正常参与扫描,但其中内容不能被勾选清理
- 相似图片、视频和文件夹可标记为“不是重复项”,应用会在本地记住并隐藏相同候选
- 相似图片支持并排、透明叠加与像素差异预览;相似视频支持九个采样点逐帧对照
- 自动保留路径最短、最新、最早或指定文件夹中的文件
- 支持 Quick Look、Finder 定位、CSV 报告和清理清单导出
- 清理操作只允许移入废纸篓,不提供直接永久删除
- 清理前进行全局保留校验,保证每个重复组至少保留一个真实文件或文件夹
- 图片缩放和特征预处理使用 Core Image + Metal
- 视频画面由 AVFoundation 使用系统硬件解码能力
- SHA-256、逐字节复核和压缩数据解码仍属于 CPU 或 I/O 任务
- 缓存及压缩包内容索引使用 SQLite 磁盘存储,避免把全部结果常驻内存
- 缓存同时校验路径、设备、inode、大小与修改时间;同一磁盘内改名后可继续复用已有分析结果
- 扫描任务按介质与整块物理磁盘调度:SSD 有限并行,机械硬盘和未知介质单路重 I/O,不同磁盘可并行
- 手动介质类型按物理磁盘保存在本地,可随时恢复系统自动识别;严重温度时全局降为单路
- 压缩包通过系统
libarchive流式读取,不解压到磁盘,也不改写原压缩包 - 默认限制单个压缩条目、压缩包总解压流量和条目数量,降低压缩炸弹导致资源耗尽的风险
- 相似图片、相似视频和相似文件夹仅提供候选结果,需要人工确认
- 自动选择会撤销跨结果组冲突项,避免不同类别同时选中同一个真实目标
- 保护位置约束同时存在于界面选择和最终清理计划中,避免仅靠按钮禁用造成绕过
- 符号链接会被跳过;指向同一 inode 的硬链接只按一个物理文件处理
- 加密、损坏或当前系统
libarchive不支持的 RAR/7Z 会显示为无法分析 - 当前不识别大幅裁剪后的图片,也不识别只截取部分片段的视频
- APFS 克隆文件的实际释放空间可能低于界面显示的标称大小
- macOS 14 Sonoma 或更高版本
- Swift 5.10 或兼容版本
- Xcode Command Line Tools;也可以使用完整 Xcode
项目没有联网依赖,使用 SwiftUI、Foundation、AVFoundation、Core Image、Metal、SQLite 和 libarchive 等 macOS 系统能力。
克隆仓库并进入目录:
git clone https://github.com/WJLS86/same-or-not.git
cd same-or-not生成本机应用:
chmod +x scripts/build_app.sh
./scripts/build_app.sh产物位于 build/是否一样.app。脚本生成的是本机临时签名版本,不会自动安装到“应用程序”目录,也没有经过 Apple 公证。
也可以用 Xcode 打开 Package.swift,选择“是否一样”和“My Mac”后运行。
运行完整测试:
swift test运行不依赖测试框架的基础自检:
swift run SameOrNotSelfTest测试只在系统临时目录中生成隔离的图片、视频、压缩包和普通文件,结束后自动清理;不会对真实文件执行移入废纸篓操作。
Sources/
├── SameOrNotCore/ # 扫描、哈希、媒体与压缩包分析、缓存及清理规划
├── SameOrNotApp/ # SwiftUI 界面、状态管理、筛选与报告导出
├── CArchive/ # 系统 libarchive 模块映射
└── CSQLite/ # 系统 SQLite 模块映射
Tests/ # 核心逻辑、清理安全、缓存与相似度基准回归测试
Tools/SelfTest/ # 独立基础自检
AppResources/ # App 图标和 Info.plist
scripts/build_app.sh # 本机 App 打包脚本
这是以个人使用为目标持续开发的项目。提交问题时,请附上 macOS 版本、扫描阶段名称、相关设置和可复现步骤,但不要上传包含隐私的真实文件。
本仓库目前未声明开源许可证。除 GitHub 服务条款允许的浏览与派生仓库操作外,其他权利由项目作者保留。