重复文档清理:用 SHA-256 找出并处理重复办公文档

前言

知识库、项目归档和下载目录里,同名不同路径、多次备份、邮件附件另存,很容易堆出内容完全相同的文件。肉眼对比或按文件名去重,既慢也不可靠。下面介绍 SkillHub 社区 Skill「重复文档清理」(@user_08f07800/zyn):安装后由 Agent 加载包内脚本逻辑,对指定目录做基于内容哈希的重复检测,并支持先报告、再按需删除。

这是什么

「重复文档清理」是发布者 user_08f07800 在 SkillHub 上架的社区 Skill,坐标 @user_08f07800/zyn,当前版本 1.0.0,分类为 knowledge-management。平台标注 requires_api_key=false,无需额外 API Key。

Skill 包主体是一份可执行的 Python 脚本(仓库内文件名为 SKILL.md),实现「文档重复清理工具(Document Duplicate Cleaner)」:对目录内支持的办公与文本格式计算 SHA-256 内容哈希,将哈希相同的文件归为一组,输出报告并可选进入清理流程。SkillHub 页面简介与技能名一致,未单独展开更长说明;具体能力以包内脚本为准。

官方入口:

  • SkillHub 页面:https://www.skillhub.cn/skills/user_08f07800/zyn
  • API 坐标页:https://api.skillhub.cn/user_08f07800/zyn

(SkillHub 展示数据示例:评分 100000,下载 1000;以页面实时显示为准。)

核心功能

以下均来自 Skill 包内脚本实现,已核实。

扫描与哈希

  1. 对目标目录遍历文件(默认递归子目录;可用 --no-recursive 仅扫当前层)。
  2. 按扩展名过滤,内置支持包括但不限于:.pdf、.docx、.doc、.xlsx、.xls、.pptx、.ppt、.txt、.md、.csv、.json、.xml、.html、.htm、.rtf、.odt、.ods、.odp、.eml、.msg 等;可用 --ext 追加扩展名。
  3. 跳过常见无关目录:.git、.svn、.hg、__pycache__、node_modules、.cache 等。
  4. 对每个文件分块读取并计算 SHA-256;读取失败会打印警告并跳过该文件。

重复分组与报告

  1. 将哈希值相同的文件分为一组(至少 2 个文件才算重复)。
  2. 组内按修改时间排序,修改时间最早的视为「原始」,其余标为重复。
  3. 报告输出组数、重复文件个数、可节省空间估算;对 .txt、.md 等文本类可尝试 UTF-8 / GBK 等编码做短预览(最多约 200 字符)。
  4. 可用 -o FILE 将报告写入文件。

清理策略

  1. 默认 dry-run(--dry-run):只列出将删除的项,不改动磁盘。
  2. 使用 --delete 进入实际删除前,脚本会交互询问:整组保留、整组删除重复项,或按编号选择性删除;批量删除前需输入 y 确认。
  3. 可用 -e / --exclude 多次传入正则,排除匹配的文件名或目录名。

说明: 判定依据是整文件字节级相同。扩展名不同但内容相同会被视为重复;内容略改则哈希不同,不会归入同一组。

安装与启用

通过 SkillHub CLI 安装

先确认本机已安装 skillhub(未安装时可参考 https://skillhub.cn/install/skillhub.md 中的安装脚本)。安装 Skill 时必须用 --dir 指向当前 Agent 的 skills 目录,否则默认落在 ./skills/ 可能不会被识别。

command -v skillhub && skillhub --version
skillhub install zyn --namespace user_08f07800 --dir ~/.cursor/skills

上例目录对应 Cursor;其他客户端常见路径(摘自 SkillHub 安装文档):

  • Claude Code:~/.claude/skills/
  • Codex:~/.codex/skills/ 或项目下 .agents/skills/

安装完成后,按所用客户端要求重启或刷新 Agent,使 @user_08f07800/zyn 可被加载。

让 AI 代为安装

SkillHub 页面提供的提示词为:请根据 https://skillhub.cn/install/skillhub.md,安装 @user_08f07800/zyn。

典型用法

包内脚本通过 argparse 提供命令行接口。安装后脚本位于 skills 目录下的 @user_08f07800/zyn/SKILL.md(路径随 --dir 而变)。在已安装 Python 3 的环境中,可直接用解释器执行该文件(文件首行为 #!/usr/bin/env python3)。

扫描某目录并仅生成报告(默认 dry-run,不删除):

python3 ~/.cursor/skills/@user_08f07800/zyn/SKILL.md /path/to/documents

扫描当前目录、排除名称匹配 temp 或 backup 的路径:

python3 ~/.cursor/skills/@user_08f07800/zyn/SKILL.md . -e "temp|backup"

将报告保存到文件:

python3 ~/.cursor/skills/@user_08f07800/zyn/SKILL.md . -o duplicate_report.txt

在确认报告无误后,进入实际删除流程(会交互确认):

python3 ~/.cursor/skills/@user_08f07800/zyn/SKILL.md . --delete

在 Agent 会话中,也可直接说明目标目录与是否只报告、是否排除某些子目录,由已加载该 Skill 的 Agent 按上述参数调用脚本;包内示例命令写的是 duplicate_cleaner.py,与发布文件名 SKILL.md 不一致,执行时请使用实际安装路径。

适用场景与注意

适合:

  • 本地或网盘同步下来的文档库、项目 docs/、邮件导出目录的内容级去重摸底。
  • 需要先看清重复组与可节省空间,再决定是否删除的场景(默认 dry-run)。

限制与注意:

  1. 仅处理脚本列出的扩展名;不在列表内的文件会被忽略,除非用 --ext 补充。
  2. 哈希相同即视为重复,不区分「哪个副本更该保留」的业务含义;脚本默认保留最早修改时间的文件,删除前请自行核对路径与版本。
  3. --delete 会真实 os.remove,建议先备份或在副本目录试跑 dry-run。
  4. 二进制办公格式(如 PDF、Office)只做哈希与元数据展示,不做正文解析;「同名不同内容」或「近似重复」不在本 Skill 范围内。
  5. 交互式删除需在终端 stdin 可用;纯非交互环境更适合只用扫描与 -o 报告,再人工处理。

结尾

「重复文档清理」把重复文档检测收敛为一条可复现的流水线:递归扫描、SHA-256 分组、报告与可选清理,并默认 dry-run 降低误删风险。若你正在整理 knowledge-management 类资产,可从 SkillHub 安装 @user_08f07800/zyn,对目标目录先跑报告再决定是否 --delete。

官方地址:https://www.skillhub.cn/skills/user_08f07800/zyn

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye