Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

是否一样

是否一样 App 图标

一款完全离线运行的 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 服务条款允许的浏览与派生仓库操作外,其他权利由项目作者保留。

About

完全离线运行的 macOS 重复文件、相似媒体、相似文件夹及压缩包内容筛选工具

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages