mcpField
F
file-organizer

file-organizer

github.com/akira82-ai生产力37 次安装
代码仓库

关于 file-organizer

file-organizer 是一项基于文件名语义分析的文件整理技能,适合需要归档本地文件的人。它按 Johnny Decimal 编号动态创建分类,先展示计划并等待确认,还可检查重复文件。

主要功能

  1. 01按文件名语义动态分类
  2. 02使用 Johnny Decimal 编号
  3. 03优先匹配目标目录现有分类
  4. 04执行前展示计划并等待确认
  5. 05通过 MD5 检查重复文件

适用场景

  1. 01按主题整理下载目录中的文件
  2. 02将文件归档到目标目录已有分类
  3. 03整理前确认分类计划并调整分组
  4. 04检查归档目录中的重复文件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/akira82-ai/file-organizer --skill file-organizer

安装后在 Claude Code 中输入/file-organizer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.DS_Store
.gitattributes
.gitignore
LICENSE
README.md
history.json
evals/
evals.json
references/
johnny_decimal.md
scripts/
check_duplicates.py
manage_history.py

详细介绍

来自项目 README

File Organizer Skill

启动横幅

技能启动时,首先向用户显示以下欢迎信息:

═══════════════════════════════════════════════════════════════
                  ▌ 智能文件整理器 ▐
               AI 驱动的文件分类系统
═══════════════════════════════════════════════════════════════
  磊叔 │ 微信:AIRay1015 │ github.com/akira82-ai
  ───────────────────────────────────────────────────────────
  📁 Johnny Decimal 智能分类系统
  🤖 AI 语义分析,动态生成分类
  🔍 内置重复文件检测(MD5)
  ✨ 执行前预览确认,安全可靠
═══════════════════════════════════════════════════════════════

技能已启动...

基于 AI 语义分析的智能文件整理技能,根据文件内容动态创建分类。

核心特性

特性说明
分类方式AI 分析文件名语义,动态生成分类
交互模式AskUserQuestion 询问源/目标目录
用户确认显示分类计划后等待确认
目标优先优先使用目标目录现有分类
重复检测使用 MD5 算法自动检测重复文件

使用方式

本技能通过自然语言触发,你可以用多种方式描述需求:

示例:

  • "把我的 Downloads 文件夹整理到 Documents/Archives"
  • "我的下载文件夹太乱了,帮我按类别整理一下"
  • "整理这些文件:~/Downloads → ~/Documents/Organized"
  • "清理下载文件夹,把文件按类型分类"

如果需要指定特定目录:

  • 可以在对话中直接提供路径
  • 技能会通过 AskUserQuestion 询问源目录和目标目录
  • 支持绝对路径和相对路径(如 ~/Downloads, ./files)

Johnny Decimal 分类标准

本技能使用 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_消费零售        # 商业领域

执行流程

1. 解析参数

检查用户是否提供了源目录和目标目录参数。

2. 确定源目录(如未指定)
2.1. 读取源目录历史记录
python3 scripts/manage_history.py read --type source
  • 解析 JSON 输出,获取历史记录
  • 保存到变量 source_history
2.2. 询问用户

使用 AskUserQuestion 询问用户:

  • 如果 source_history 不为空,将历史记录作为选项添加(标注"最近使用")
  • 提供常用目录选项(下载文件夹、桌面等)
  • 提供"输入新路径"选项

示例选项:

- "/Users/xxx/Downloads"(最近使用)
- "/Users/xxx/Desktop"(历史记录)
- "下载文件夹"(~/Downloads)
- "桌面"(~/Desktop)
- "文档"(~/Documents)
- "输入新路径"
3. 确定目标目录(如未指定)
3.1. 读取目标目录历史记录
python3 scripts/manage_history.py read --type target
  • 解析 JSON 输出,获取历史记录
  • 保存到变量 target_history
3.2. 询问用户

使用 AskUserQuestion 询问用户:

  • 如果 target_history 不为空,将历史记录作为选项添加(标注"最近使用")
  • 提供常用目录选项(文档文件夹、桌面等)
  • 提供"输入新路径"选项

示例选项:

- "/Users/xxx/Documents/Organized"(最近使用)
- "/Users/xxx/Desktop/Archive"(历史记录)
- "文档文件夹"(~/Documents)
- "桌面"(~/Desktop)
- "输入新路径"
4. 扫描目标目录
ls -la "$target"
  • 检查是否已有分类目录
  • 如有,记录现有分类列表供后续匹配
5. 扫描源文件
ls -1 "$source"
  • 获取所有文件列表
  • 跳过隐藏文件(以 . 开头)
6. AI 分析并生成分类

如果目标目录有分类:将文件匹配到现有分类

如果目标目录无分类: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_医疗健康        # 行业领域

分类原则:

  • 根据文件名的语义相似性分组
  • 先识别主题领域(技术/商业/行业/娱乐等),再细分具体类别
  • 分类名称简洁明了(中文或英文)
  • 每个分类包含相关联的文件
  • 优先识别常见模式(代码、文档、图片、压缩包等)
7. 显示分类计划

根据步骤 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 变量值,不要硬编码路径。

8. 用户确认(必须)

使用 AskUserQuestion 询问是否执行:

选项:

  • 确认执行 - 按照上述分类计划移动文件
  • 展开查看全部 - 显示完整的文件列表(适用于摘要模式)
  • 调整分类 - 修改某些文件的分类
  • 取消操作 - 放弃本次整理

必须等待用户确认后才能执行移动操作

模式切换说明:

  • 如果用户在摘要模式下选择"展开查看全部",重新以完整列表模式显示步骤 7
  • 再次确认时,展开查看全部 选项替换为 返回摘要模式
8.5. 保存到历史记录

在用户确认后,保存本次使用的目录到历史记录。

# 保存源目录
python3 scripts/manage_history.py add --type source --path "$source"

# 保存目标目录
python3 scripts/manage_history.py add --type target --path "$target"
9. 创建目录结构

根据步骤 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 变量,不要硬编码路径。

10. 执行移动操作

使用 Bash 命令批量移动文件到对应分类目录。

11. 重复文件检查与处理

在移动文件完成后,检查目标目录是否存在重复文件。

# 调用 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 组保留修改时间最早的文件
  • 删除其余重复文件
  • 显示删除文件数和释放空间

如果选择保留所有:

  • 跳过此步骤,继续流程

如果未发现重复文件:

  • 显示 "✨ 未发现重复文件!"
  • 直接继续下一步
12. 输出报告
# 检查源目录是否清空
ls -1 "$source" | wc -l

# 显示各分类文件数
echo ""
echo "📊 分类统计:"
for dir in "$target"/*/; do
  dir_name=$(basename "$dir")
  echo "  $dir_name"
done

技术说明

  • 文件名语义分析不依赖扩展名
  • 支持中文和英文文件名
  • 动态生成分类,无固定模板
  • 优先匹配目标目录现有分类
  • 自动创建不存在的目录结构
  • 跳过隐藏文件(. 开头)

评论

支持 Markdown