name: file-organizer description: | 基于 AI 语义分析的智能文件整理技能,根据文件内容动态创建 Johnny Decimal 分类。
当用户提到以下内容时触发: - "整理文件"、"分类文件"、"组织下载"、"文件归档" - "文件太多了"、"下载文件夹很乱"、"文件乱七八糟" - "把文件按类别整理"、"自动分类文件" - "清理下载文件夹"、"整理文档" - "文件管理"、"文件分类整理" - 提到需要将文件从一个目录移动到另一个目录进行分类
核心功能: - AI 分析文件名语义,动态生成分类 - 使用 Johnny Decimal 编号系统(XX.YY 格式) - 自动检测重复文件(MD5 算法) - 用户确认分类计划后再执行 version: 1.0.0 allowed-tools: Bash, AskUserQuestion, Task author: Claude Code
基于 AI 语义分析的智能文件整理技能,根据文件内容动态创建分类。
| 特性 | 说明 |
|---|---|
| 分类方式 | AI 分析文件名语义,动态生成分类 |
| 交互模式 | AskUserQuestion 询问源/目标目录 |
| 用户确认 | 显示分类计划后等待确认 |
| 目标优先 | 优先使用目标目录现有分类 |
| 重复检测 | 使用 MD5 算法自动检测重复文件 |
本技能通过自然语言触发,你可以用多种方式描述需求:
示例: - "把我的 Downloads 文件夹整理到 Documents/Archives" - "我的下载文件夹太乱了,帮我按类别整理一下" - "整理这些文件:~/Downloads → ~/Documents/Organized" - "清理下载文件夹,把文件按类型分类"
如果需要指定特定目录:
- 可以在对话中直接提供路径
- 技能会通过 AskUserQuestion 询问源目录和目标目录
- 支持绝对路径和相对路径(如 ~/Downloads, ./files)
本技能使用 Johnny Decimal 编号系统进行文件分类。详细规范请参考:references/johnny_decimal.md
核心要点:
- 使用 XX.YY 格式的分类编号(如 01-01, 10-05)
- 主编号按主题领域递增(如 01-XX 技术类,02-XX 商业类)
- 子编号在同一领域内按顺序递增
- 分类命名格式:编号_类别名称
快速示例:
01-01_人工智能技术 # 技术领域
01-02_网络安全 # 技术领域
01-03_编程开发 # 技术领域
02-01_金融经济 # 商业领域(新主题,主编号递增)
02-02_消费零售 # 商业领域
检查用户是否提供了源目录和目标目录参数。
使用 AskUserQuestion 询问用户,提供常用目录选项。
使用 AskUserQuestion 询问用户,提供常用目录选项。
ls -la "$target"
ls -1 "$source"
. 开头)如果目标目录有分类:将文件匹配到现有分类
如果目标目录无分类:AI 分析所有文件名,动态创建分类
重要:生成的分类名称必须带编号前缀,格式为 编号_类别名称
- 编号使用 Johnny Decimal 格式:01-01, 01-02, 02-01, 10-05 等
- 编号与类别名称之间用下划线 _ 分隔
- 类别名称可以使用中文或英文,允许包含下划线
编号递增规则(关键):
- 主分类编号(第一部分):根据主题领域递增
- 同一大类主题下的所有子分类共享相同的主分类编号
- 例如:所有技术相关用 01-XX,所有商业相关用 02-XX,所有行业相关用 03-XX
- 每个主分类编号最多包含 99 个子分类(01-01 到 01-99)
- 当发现不同的主题领域时,必须递增主分类编号
- 子分类编号(第二部分):在同一主题领域内按顺序递增(01, 02, 03...)
示例:
01-01_人工智能技术 # 技术领域
01-02_网络安全 # 技术领域
01-03_编程开发 # 技术领域
02-01_金融经济 # 商业领域(新主题,主编号递增)
02-02_消费零售 # 商业领域
02-03_商业管理 # 商业领域
03-01_教育培训 # 行业领域(新主题,主编号再递增)
03-02_医疗健康 # 行业领域
分类原则: - 根据文件名的语义相似性分组 - 先识别主题领域(技术/商业/行业/娱乐等),再细分具体类别 - 分类名称简洁明了(中文或英文) - 每个分类包含相关联的文件 - 优先识别常见模式(代码、文档、图片、压缩包等)
根据步骤 6 生成的分类,向用户展示整理计划。
显示策略:
- 文件总数 ≤ 30:显示完整文件列表(当前模式)
- 文件总数 > 30:智能摘要模式
- 显示:分类名称 + 文件数量 + 前 3 个代表性文件
- 提供:[展开查看全部] 选项
统计文件总数(Bash):
total_files=$(ls -1 "$source" | wc -l | tr -d ' ')
示例格式(使用实际变量):
模式 A:完整列表(≤30 个文件)
📁 源目录: $source (13 个文件)
📂 目标目录: $target (新建分类)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📚 01-01_学习资料 (3 files)
├── 学习笔记Python.pdf
├── 课程视频.mp4
└── 教程.md
💻 01-02_代码项目 (2 files)
├── React组件.tsx
└── script.py
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
模式 B:智能摘要(>30 个文件)
📁 源目录: $source (127 个文件)
📂 目标目录: $target (新建分类)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📚 01-01_学习资料 (45 files) [展开查看全部]
├── 学习笔记Python.pdf
├── 课程视频.mp4
└── 教程.md
... 还有 42 个文件
💻 01-02_代码项目 (38 files) [展开查看全部]
├── React组件.tsx
├── script.py
└── index.html
... 还有 35 个文件
📦 01-03_压缩备份 (44 files) [展开查看全部]
├── backup.zip
├── archive.tar.gz
└── documents.7z
... 还有 41 个文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 提示:文件数量较多,显示为智能摘要模式
注意: 显示时使用实际的 $source 和 $target 变量值,不要硬编码路径。
使用 AskUserQuestion 询问是否执行:
选项: - 确认执行 - 按照上述分类计划移动文件 - 展开查看全部 - 显示完整的文件列表(适用于摘要模式) - 调整分类 - 修改某些文件的分类 - 取消操作 - 放弃本次整理
必须等待用户确认后才能执行移动操作
模式切换说明:
- 如果用户在摘要模式下选择"展开查看全部",重新以完整列表模式显示步骤 7
- 再次确认时,展开查看全部 选项替换为 返回摘要模式
根据步骤 6 生成的分类,动态创建目录。
格式: $target/编号_类别名称
示例(根据实际分类动态创建):
# 假设 AI 生成的分类为:
# - 01-01_Claude相关
# - 01-02_AI综合应用
# - 01-03_代码项目
mkdir -p "$target/01-01_Claude相关"
mkdir -p "$target/01-02_AI综合应用"
mkdir -p "$target/01-03_代码项目"
注意: 必须使用 $target 变量,不要硬编码路径。
使用 Bash 命令批量移动文件到对应分类目录。
在移动文件完成后,检查目标目录是否存在重复文件。
# 调用 Python 脚本检查重复文件
python3 scripts/check_duplicates.py "$target"
脚本输出示例:
🔍 重复文件检查报告
============================================================
📂 目标目录: /Users/user/Documents/Archives
📄 总文件数: 45
✅ 唯一文件: 42
🔄 重复组数: 1
⚠️ 发现以下重复文件:
MD5: a1b2c3d4e5f6...
大小: 1,234,567 字节
✅ 保留: 01-01_学习资料/document.pdf
时间: 2025-02-10 14:30:00
🗑️ 重复: 01-02_代码项目/document.pdf
时间: 2025-02-15 09:20:00
处理重复文件(如果发现重复):
使用 AskUserQuestion 询问用户处理方式:
选项: - 自动删除重复文件(保留每组最早创建的文件) - 保留所有文件(不做任何修改) - 查看详细报告(显示完整 JSON 报告)
如果选择自动删除:
python3 scripts/check_duplicates.py "$target" --delete
删除策略: - 每个 MD5 组保留修改时间最早的文件 - 删除其余重复文件 - 显示删除文件数和释放空间
如果选择保留所有: - 跳过此步骤,继续流程
如果未发现重复文件: - 显示 "✨ 未发现重复文件!" - 直接继续下一步
# 检查源目录是否清空
ls -1 "$source" | wc -l
# 显示各分类文件数
echo ""
echo "📊 分类统计:"
for dir in "$target"/*/; do
dir_name=$(basename "$dir")
echo " $dir_name"
done
. 开头)这个 Skill 质量不错,能帮你把乱糟糟的文件自动按类别整理好。它最大的亮点是引入了 Johnny Decimal 编号系统,分类一目了然,还支持中文文件名。操作流程很完善,从扫描文件到分类、再到确认执行、最后检测重复文件,整个过程都有考虑。不过使用前最好先备份一下文件,而且文档里有些地方说法不太一致,初次使用可能需要仔细看一下说明。