package vault import ( "os" "path/filepath" "strings" ) // ScanVault 扫描知识库目录,返回所有 markdown 文件的元数据 func ScanVault(vaultPath string) ([]*FileMeta, error) { var files []*FileMeta err := filepath.Walk(vaultPath, func(path string, info os.FileInfo, err error) error { if err != nil { return nil // 跳过错误文件 } if info.IsDir() { // 跳过隐藏目录 if strings.HasPrefix(info.Name(), ".") && info.Name() != "." { return filepath.SkipDir } // 跳过待审阅目录 if info.Name() == "待审阅" { return filepath.SkipDir } return nil } if !strings.HasSuffix(path, ".md") { return nil } relPath, _ := filepath.Rel(vaultPath, path) meta, err := ParseFile(path, relPath) if err != nil { return nil // 跳过解析失败的文件 } files = append(files, meta) return nil }) return files, err }