name: 检查链接 description: 在笔记库中查找损坏的wiki链接。只读分析 — 扫描[[链接]]并验证目标文件是否存在。不写入,无依赖。 allowed-tools: Grep, Glob, Read user-invocable: true
检查链接技能
通过在您的笔记库中提取链接目标并验证每个目标文件是否存在,查找损坏的[[wiki-links]]。只读 — 永不修改文件。
使用方法
/check-links
或者询问:
- “在我的笔记库中检查损坏的链接”
- “查找死wiki链接”
- “有没有损坏的链接?”
如何执行
步骤1: 提取所有wiki链接
使用 Grep 在markdown文件中查找所有[[...]]模式:
Grep:
pattern: "\\\\[[\\\\[([^\\\\]|]+)"
glob: "*.md"
output_mode: content
-n: true
这捕获链接目标(在任何|别名之前)。从结果中排除.claude/和.obsidian/目录。
步骤2: 构建唯一目标列表
从grep结果中,提取唯一的链接目标。对于每个匹配项如[[My Note]]或[[My Note|display text]],目标是My Note。
剥离:
- 标题锚点:
[[Note#heading]]→ 目标是Note - 块引用:
[[Note^block-id]]→ 目标是Note - 别名:
[[Note|alias]]→ 目标是Note
步骤3: 验证每个目标是否存在
对于每个唯一目标,使用 Glob 检查是否存在匹配的文件:
Glob:
pattern: "**/<target>.md"
如果没有文件匹配,链接是损坏的。如果至少有一个文件匹配,链接是有效的。
步骤4: 报告结果
按源文件分组损坏的链接:
## 损坏链接报告
### Daily Notes/2024-01-15.md
- [[Projet Alpha]] — 未找到匹配文件
- [[Old Goal]] — 未找到匹配文件
### Projects/Project Beta.md
- [[Meeting Notes Jan]] — 未找到匹配文件
---
**总结:** 在2个文件中发现3个损坏链接(共检查45个链接)
步骤5: 建议修复
对于每个损坏的链接,尝试查找近似匹配:
- 使用 Glob 与部分模式:
**/*<partial-target>*.md - 如果存在相似文件名,建议它:
- [[Projet Alpha]] — 您是指[[Project Alpha]]吗? - 如果没有近似匹配,只报告"未找到匹配文件"
边缘情况
- 嵌入式图像 (
![[image.png]]) — 跳过这些,它们引用附件 - 外部链接 (
[text](https://...)) — 跳过这些,它们不是wiki链接 - 模板占位符 (
[[{{date}}]]) — 跳过任何目标中包含{{的 - 空链接 (
[[]]) — 报告为格式错误,非损坏
无损坏链接
如果所有链接都有效:
✅ 所有wiki链接已验证 — 在X个文件(Y个链接检查)中未发现损坏链接
提示
- 定期运行
/check-links以捕获链接失效 - 重命名文件后,运行此技能以查找需要更新的链接
- 结合
/search以查找引用已删除内容的笔记