SuperAPI AI 工具集

vault-fs

办公与效率

查看项目

更新于 10-23 00:33

技能介绍

Vault FS 是一个面向 Obsidian 库文件操作的工具,核心是一个脚本 scripts/vault_fs.py,其行为方式类似于 Obsidian 的“自动更新内部链接”功能。它用于在库内安全地移动、重命名或删除笔记和附件,并确保所有相关链接保持有效。

主要用途:在 Obsidian 库中执行文件操作时,自动更新引用该文件的内部链接、嵌入链接、标题链接、块链接、别名及 Markdown 链接,避免链接断裂。

主要能力:

  • 重写 [[x]]、![[x]]、#heading、#^block、|alias、表格转义的 [[x|a]] 以及 Markdown 链接 t 和 %20 编码链接,并保持原有写法风格。
  • 重命名时重写裸 [[Old]] 链接;如果新名称与其他笔记共享,则写入路径链接,而非依赖 Obsidian 的平局裁决。
  • 被移动笔记内部的相对链接会根据新文件夹重新定位。
  • 代码块和行内代码永远不会被修改。
  • 整个批量操作会先进行验证(缺失源文件、目标已存在、重复项);只要有一项被拒绝,则不会移动任何文件。
  • 删除操作从不硬删除;除非使用 --force,否则只要有文件链接到目标文件,就会拒绝删除。

使用方式:

  • 默认以试运行模式运行,始终先不带 --apply 运行一次,向用户展示摘要,然后再带 --apply 重新运行。
  • 默认库路径为 ~/Brains/brain,可通过 --vault PATH 覆盖。
  • 示例命令: S=~/.claude/skills/vault-fs/scripts/vault_fs.py python3 $S mv "Inbox/Idea.md" "Projects/" # 移动到文件夹(保留名称) python3 $S mv "Old name" "Folder/New name" --apply # 移动并重命名;.md 可选 python3 $S mv --batch moves.tsv # 批量移动,一次库扫描(源<TAB>目标) python3 $S rm "Dead note" "Attachments/x.png" # 列出入站链接;若有则拒绝 python3 $S rm "Dead note" --apply # 通过 trash 发送到 macOS 废纸篓

从其他脚本调用: sys.path.insert(0, os.path.expanduser("~/.claude/skills/vault-fs/scripts")) import vault_fs moves, edits, warnings = vault_fs.move_files(vault_root, [(src_rel, dst_rel), ...], apply=True)

如果任何一对被拒绝,则引发 vault_fs.MoveError(不更改任何内容)

适用场景:适用于需要在 Obsidian 库中进行文件移动、重命名或删除,同时希望保持内部链接完整的用户,尤其适合批量操作和需要预览更改的场景。

限制:

  • 不处理整个文件夹的移动(建议改为在批量列表中列出文件)。
  • 不处理 frontmatter 中的 Obsidian 别名(aliases: 别名仍然有效,因为它们位于被移动的笔记内部)。
  • 不处理非 Markdown 文件(canvas、JSON)中的链接。

测试:cd scripts && python3 -m unittest test_vault_fs。