name: organize-temp-notes description: > 把本 Obsidian Vault 中 temp/ 下的新增临时笔记归档到 知识库/ 对应目录。 支持按主题拆分成多个文件、自动迁移附件、智能合并到已有笔记、可配置分类与干运行模式。 仅适用于本 Vault(含 知识库/ 与 temp/)。 触发:用户用中文要求「整理 temp 笔记」「把 temp 整理到知识库」「temp 归档」「temp 归位」等。
Organize Temp Notes
将 temp/ 下的临时笔记安全、智能地归档到 知识库/ 对应目录。全程中文交互。
核心流程
1. 扫描待整理文件
- 列出
temp/下所有.md文件,忽略.DS_Store与子目录(仅处理一级文件)。 - 若 temp 为空,回复「暂无临时笔记需要整理」并结束。
2. 解析内容并生成操作计划(干运行)
对每一篇 temp/<文件名>.md 执行以下步骤,先不移动文件,仅生成《整理操作清单》。
2.1 拆分判定(可选特性)
- 扫描全文,检测是否存在明确主题分隔符:
- 一级标题
#(多个) - 分隔线
---或*** - 自定义标记
## 话题:开头的二级标题
- 一级标题
- 如果存在 ≥2 个分隔单元,且不同单元匹配到不同目标目录,则将原文件拆分为多个独立笔记。
- 每个单元生成独立文件,文件名按目标目录的命名风格生成(例如
Redis缓存穿透解决方案.md)。 - 在原 temp 文件中追加一条「拆分索引」区块,列出所有拆分后的笔记链接。
- 若所有单元指向同一目录,或拆分后仍只有 1 个文件,则按整篇移动处理。
- 每个单元生成独立文件,文件名按目标目录的命名风格生成(例如
- 当无法自动判定是否拆分时,使用
AskUserQuestion向用户展示拆分方案并确认。
2.2 目标目录匹配
优先使用用户自定义配置:检查 Vault 根目录下是否存在
.organize-config.json,内容格式如:{ "rules": [ { "keywords": ["Redis", "缓存"], "target": "知识库/02_后端/Redis" }, { "keywords": ["Vue3", "前端"], "target": "知识库/03_前端" } ] }若存在,则按规则顺序匹配(命中任一关键词即采纳对应目标目录)。
回退到内置归类表(见下方「归类参考」)。提取笔记主要关键词(标题、标签、高频技术词),与目录映射匹配。
若无法唯一确定,用
AskUserQuestion让用户手动选择目标目录。
2.3 附件(图片)处理
- 搜索笔记中的内嵌资源引用:
![[文件名]]格式(Obsidian 内部链接)格式
- 对所有引用的文件进行定位:
- 如果源文件位于
temp/下(如temp/attachments/xx.png),将其移动到知识库/99_附件/统一附件目录(可配置,通过.organize-config.json中的attachmentRoot字段指定,默认为知识库/99_附件)。 - 将笔记中的引用链接更新为新路径。
- 如果源文件位于
- 若引用的是 Vault 中已存在的外部附件(不在 temp 下),检查移动后链接是否依然有效,必要时修正相对路径,但绝不移动原附件。
- 对于 Obsidian 特有
![[xxx]]链接,移动后确保内部链接能精确指向新位置(需验证文件存在)。
2.4 已有文件处理策略
- 用
ls检查目标目录下是否已存在同名或高度相似的文件。 - 若目标位置有且仅为占位骨架(内容几乎为空,仅含类似
> 状态:待补充或空标题):- 将 temp 内容与骨架进行智能合并(见 2.5),最终保留合并后的完整笔记,删除原 temp 文件。
- 若已有内容丰富的正式笔记:
- 默认不覆盖,使用
AskUserQuestion向用户展示 diff,询问「替换 / 合并 / 跳过」。 - 合并时采用智能合并策略。
- 默认不覆盖,使用
- 若目标位置无文件,直接计划移动。
2.5 智能合并策略(当需要合并时)
- 解析两个文件的标题结构(
# ~ ######)。 - 同名标题下的内容:进行段落级去重比较(简单策略:比较纯文本内容相似度,忽略空白,若相似度 > 80% 则视为重复,仅保留一份)。
- Temp 独有的标题及内容:按原层级插入到合适位置(尽可能保持原有结构)。
- 若 temp 中提供了现有标题下缺失的细节要点(列表项、代码块等),追加到该标题末尾,并加上
<!-- migrated from [[temp/原文件名]] -->注释。 - 合并后生成预览(新增/修改部分),用
AskUserQuestion请用户确认。
3. 用户确认与执行
- 将完整的《整理操作清单》以表格形式展示给用户:
| 原文件 (temp/) | 操作 | 目标路径 (知识库/) | 备注 |
|---|---|---|---|
| 学习笔记.md | 拆分为3篇 | 02_后端/Redis/...、03_前端/...、01_基础/算法/... | 需要迁移2张图片 |
| 零碎记录.md | 移动 | 07-琐碎知识/零碎记录.md | 附件无需移动 |
| 项目总结.md | 合并到已有文件 | 04_项目/旅行推荐/项目总结.md | 将补充3个新段落 |
- 用户确认后,逐条执行:
- 确保目标父目录存在(
mkdir -p)。 - 执行文件移动(
mv或git mv)。移动语义,不复制。 - 如需合并,先写出合并后的完整内容到目标文件,再删除 temp 原文件。
- 执行附件移动及链接重写。
- 若原 temp 文件被拆分,在所有拆分出的新文件中写入头部元信息(可选):
原临时笔记:[[temp/原文件名]](已拆分)
- 确保目标父目录存在(
4. 关联笔记(可选)
严格验证以下三条后,才在笔记末尾添加 ## 关联笔记 区块:
- 候选笔记真实存在于知识库中(用
ls/Read验证完整路径)。 - 候选笔记不是空骨架(内容 > 200 字符,且不含
> 状态:待补充)。 - 与当前笔记强相关(主题重叠度高,或有明确引用关系)。
新策略:
- 不仅利用 temp 内容中出现的
[[链接]],还可以根据关键词自动检索知识库中匹配的笔记作为关联候补。 - 如果目标目录下有
README.md或索引.md,优先将其作为关联链接,而非散列多个碎片笔记。 - 若 temp 中已有手写
## 关联笔记,优先使用并保留其中已验证的链接,仅补充自动发现的、且不重复的链接。 - 有效关联不足 2 条时,直接不写该区块。
5. 完成报告
用中文简短汇报:
- 每个文件的处理结果(
temp/xxx.md→知识库/...,拆分为几篇,是否合并,是否迁移附件)。 - 关联笔记添加情况(例如「为 2 篇笔记添加了关联区块」)。
- 执行
git status(若可用)展示变更摘要。 - 若存在因占位骨架未处理的文件,单独列出「可清理的占位笔记」清单,供用户手动决策。
归类参考(内置默认)
当无自定义配置时,按以下规则匹配(关键词不区分大小写):
| 主题关键词 | 目标目录 |
|---|---|
| 网络, 操作系统, 算法, 数据结构, 设计模式 | 知识库/01_基础/ 对应子目录 |
| Java, JVM, Spring, 数据库, 中间件, 运维, 测试 | 知识库/02_后端/ 对应子目录 |
| Vue3, 前端工程化 | 知识库/03_前端/ |
| 旅行推荐项目 | 知识库/04_项目/旅行推荐/ |
| 面试回顾 | 知识库/05_日常/面试回顾/ |
| Claude Code, AI Agent, AI 系统架构 | 知识库/06-AI/ |
| Redis/Spring 等碎片问题 | 知识库/07-琐碎知识/ |
| 创业, 社群, 商业观察 | 知识库/08-其他知识/ |
若多个关键词指向不同目录,取优先级最高的目录(按表格从上到下顺序),或交由用户选择。
全局约束
- 语言:所有输出(提示、确认、报告)均为中文。
- 文件操作:只移动不复制;temp 原文件在确认迁移成功后删除。绝不动知识库/ 下的已有笔记(除非主动合并)。
- 版本控制:不主动执行
git commit(由 obsidian-git 自动备份)。可使用git mv以保留历史。 - 引用规范:所有提及笔记时,必须使用完整 vault 相对路径的 wiki 链接,如
[[知识库/02_后端/Redis/缓存穿透.md|缓存穿透]]。 - 不强制添加 Frontmatter:除非笔记本身已包含或用户明确要求。
- 附件路径:迁移后确保附件在 Obsidian 内可解析(通过
![[知识库/99_附件/xxx.png]]或相对路径)。
严禁事项
- ❌ 不新建只含「> 状态:待补充」及空标题的占位骨架笔记。
- ❌ 不照搬
wiki/domains/*.md等过时索引中的双链作为关联(必须经过实时ls验证)。 - ❌ 未经用户确认,不删除任何知识库内已有文件。
- ❌ 不在合并时简单全文追加导致大量重复。
- ❌ 不忽略图片/附件迁移,导致笔记打开后图片无法显示。
配置文件的详细说明(可选实现)
用户可在 Vault 根目录放置 .organize-config.json,内容示例:
{
"attachmentRoot": "知识库/99_附件",
"rules": [
{ "keywords": ["Redis"], "target": "知识库/02_后端/Redis" },
{ "keywords": ["算法", "数据结构"], "target": "知识库/01_基础/算法" }
],
"defaultTarget": "知识库/07-琐碎知识"
}
Skill 启动时应检查该文件,优先于内置表。