← ClaudeAtlas

obsidian-vault-organizelisted

整理 Obsidian 仓库时保证双向引用不断裂。移动/重命名/归档文件或文件夹后,全 vault 重写 wikilink、markdown 链接、嵌入与 canvas 引用,并用断链校验归零验证。适合批量重组目录、归档旧笔记、统一命名、修复断链、清理孤儿文件。当用户要求"整理 vault"、"移动笔记"、"重命名笔记"、"修复断链"、"归档"时使用。
Linearl/reasonix_skill_repo · ★ 2 · AI & Automation · score 63
Install: claude install-skill Linearl/reasonix_skill_repo
# Obsidian Vault 整理与链接安全操作 在 Obsidian 仓库(vault)里移动、重命名、归档、清理文件时,保证所有链接(双向引用)不失效。本技能提供**确定性流程**:盘点 → 规划 → 执行移动 → 重写引用 → 断链校验归零 → 清理。 ## 核心事实(决定一切操作方式) 1. **Obsidian 只在应用内操作(`fileManager.renameFile`,即界面里拖动/重命名)时才会自动重写全库链接**。 2. **外部移动(shell `mv`、脚本、agent 的文件工具、同步软件)不会被自动维护**:Obsidian 的 watcher 能检测到变化(文件树刷新、`vault.on('rename')` 事件),但只是"感知",不会重写任何链接——该断的链照样断。 3. 因此:**任何经 agent/脚本���行的移动,都必须显式重写引用并校验**,不得依赖 Obsidian 的 watcher。 4. 删除没有自动修复:删除前必须查反向引用(谁链接了它),删除后同步清理引用或改为归档。 5. 破坏性操作遵守安全规范:删除前先 `ls`/`find` 确认清单,批量删除走回收(trash)语义,禁止多目标 `rm -rf` 混用。 ## 链接类型清单(扫描与重写必须全覆盖) | 类型 | 语法示例 | 说明 | |---|---|---| | wikilink | `[[Note]]` | 目标不带扩展名 | | wikilink 别名 | `[[Note\|显示名]]` | 只改目标部分,保留 `\|别名` | | wikilink 锚点 | `[[Note#标题]]`、`[[Note#^blockid]]` | 只改 `#` 前的路径部分 | | 嵌入 | `![[Note]]`、`![[img.png]]`、`![[pdf.pdf]]` | 带扩展名的附件按原样匹配路径 | | markdown 链接 | `[文本](path.md)`、`[文本](../sub/c.md)` | 可能是 vault 绝对(`/` 开头)或相对当前文件的路径;可能有 `%20` 编码 | | canvas 引用 | `"file": "old.md"`、`"link": "[[old]]"` | `.canvas` 是 JSON | | properties/frontmatter | `link: "[[old]]"` 或 `link: old.md` | 普通文本扫描即覆盖 | ## 工作流 ### Step 1 盘点 - 定位 vault 根:包含 `.obsidian/` 的目录。只操作 vault 内的文件。 - 读 `.obsidian/app.json` 了解链接设置:`newLinkFormat`(`shortest`/`absolute`/`relative`)与 `useMarkdownLinks`——决定新链接的写法风格,尽量沿用原风格。 - 收集全 vault 文件清单(跳过 `.obsidian/`、`.git/`、`.trash/`)。 ### Step 2 规划 - 列出移动/重命名清单(旧路径 → 新路径),一次只执行一个明确目标。 - 对每个目标先查反链:grep `[[旧名]]`、旧路径、旧路径的 basename(Obsidian 按文件名解析时,改文件名会打中所有 vault 内引用)。 - 文件夹移动时,所有子路径的链接都受影响��前缀替换)。 ### St