file-organizer

📁 akira82-ai/file-organizer 📅 Feb 11, 2026
4
总安装量
4
周安装量
#54299
全站排名
安装命令
npx skills add https://github.com/akira82-ai/file-organizer --skill file-organizer

Agent 安装分布

opencode 4
gemini-cli 4
claude-code 4
github-copilot 4
codex 4
kimi-cli 4

Skill 文档

File Organizer Skill

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

核心特性

特性 说明
分类方式 AI 分析文件名语义,动态生成分类
交互模式 AskUserQuestion 询问源/目标目录
用户确认 显示分类计划后等待确认
目标优先 优先使用目标目录现有分类
零脚本 纯 Bash + AI 分析,无 Python 脚本

调用方式

# 完整调用
/organize --source ~/Downloads --target ~/Documents/Archives

# 简写
/organize ~/Downloads ~/Documents/Archives

# 仅指定源目录,询问目标目录
/organize ~/Downloads

# 交互式询问两个目录
/organize

Johnny Decimal 分类标准

标准1:区域划分原则

将所有内容按主题划分为 10 个连续的区域(00-09, 10-19, …, 90-99),每个区域包含一个主要领域或类别,确保内容有明确归属。

标准2:编号规则规范

采用 XX.YY 格式的分类号,其中:

  • XX(两位整数):表示区域内的主分类(00-99)
  • YY(两位小数):表示该分类下的具体项目(00-99)

标准3:可扩展性设计

通过添加额外小数位实现无限细分(如 10.01.01, 20.03.02.01),保持层级清晰的同时支持内容的不断扩展。

标准4:命名规范统一

文件/文件夹命名采用 [分类ID]_[描述性名称]_[可选信息] 格式,利用自然排序特性,无需手动调整顺序。

标准5:固定位置映射

每个分类号对应唯一的物理位置(文件夹/目录),形成稳定的 ID-位置映射关系,便于快速定位和检索。

分类示例

00-09_系统配置/
10-19_文档资料/
    10.01_报告文档/
    10.02_会议记录/
20-29_图片媒体/
    20.01_截图/
    20.02_设计图/
30-39_代码项目/
    30.01_Python项目/
    30.02_前端项目/
...

执行流程

1. 解析参数

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

2. 确定源目录(如未指定)

使用 AskUserQuestion 询问用户,提供常用目录选项。

3. 确定目标目录(如未指定)

使用 AskUserQuestion 询问用户,提供常用目录选项。

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 生成的分类,向用户展示整理计划。

示例格式(使用实际变量):

📁 源目录: $source (13 个文件)
📂 目标目录: $target (新建分类)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  📚 01-01_学习资料 (3 files)
     ├── 学习笔记Python.pdf
     ├── 课程视频.mp4
     └── 教程.md
  💻 01-02_代码项目 (2 files)
     ├── React组件.tsx
     └── script.py
  📦 01-03_压缩备份 (2 files)
     ├── backup.zip
     └── archive.tar.gz
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

完成后目录将自动更新为:01-01[03]学习资料 等格式

注意: 显示时使用实际的 $source 和 $target 变量值,不要硬编码路径。

8. 用户确认(必须)

使用 AskUserQuestion 询问是否执行:

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

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. 更新分类目录名称

在所有文件移动完成后,统计每个分类的文件数量,并更新目录名称格式。

格式: 编号[数量]类别名称

  • 编号:Johnny Decimal 格式(如 01-01, 01-10)
  • [数量]:两位数补零(如 [07], [28])
  • 类别名称:语义化的分类名称
# 为每个分类目录重命名,添加文件数量
# 初始目录名称格式为 "编号_类别名称",重命名为 "编号[数量]类别名称"

echo "🔄 正在更新分类目录名称..."

for dir in "$target"/*/; do
  dir_path="$dir"
  dir_name=$(basename "$dir_path")

  # 跳过非目录文件
  [[ ! -d "$dir_path" ]] && continue

  # 提取编号和类别名称(初始格式 "编号_类别名称")
  if [[ "$dir_name" =~ ^([0-9]{2}-[0-9]{2})_(.+)$ ]]; then
    number="${BASH_REMATCH[1]}"
    category="${BASH_REMATCH[2]}"

    # 统计文件数量(只统计文件,不包括子目录)
    count=$(find "$dir_path" -maxdepth 1 -type f | wc -l | tr -d ' ')

    # 格式化数量为两位数补零
    printf -v count_padded "%02d" "$count"

    # 新目录名称:编号[数量]类别名称
    new_name="${number}[${count_padded}]${category}"

    # 重命名目录
    mv "$dir_path" "$target/$new_name"

    echo "  ✓ $dir_name → $new_name"
  else
    echo "  ⚠️  跳过: $dir_name (格式不符合 编号_类别名称)"
  fi
done

echo "✅ 目录名称更新完成"

12. 输出报告

# 检查源目录是否清空
ls -1 "$source" | wc -l

# 显示各分类文件数(目录名称已包含数量)
echo ""
echo "📊 分类统计:"
for dir in "$target"/*/; do
  dir_name=$(basename "$dir")
  echo "  $dir_name"
done

技术说明

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