package utils import ( "errors" "io" "os" "path/filepath" ) // 将字符串写入文件 func StringToFile(path, content string) error { startF, err := os.Create(path) if err != nil { return errors.New("os.Create create file " + path + " error:" + err.Error()) } defer startF.Close() _, err = io.WriteString(startF, content) if err != nil { return errors.New("io.WriteString to " + path + " error:" + err.Error()) } return nil } // 递归遍历文件夹 // rootDir: 文件夹根目录 // s: 存储文件名的切片 // filter: 过滤条件:".git", ".idea", ".vscode", ".gitignore", ".gitea", ".github", ".golangci.yml", "*.pyc" func FileTree(rootDir string, s []string, filter []string) ([]string, error) { rd, err := os.ReadDir(rootDir) if err != nil { return s, err } for _, fi := range rd { // 检查文件名是否匹配任何一个过滤模式 matched := false for _, item := range filter { exists, err := filepath.Match(item, fi.Name()) if err != nil { continue } if exists { matched = true break } } if matched { continue } if fi.IsDir() { fullDir := rootDir + "/" + fi.Name() s, err = FileTree(fullDir, s, filter) if err != nil { return s, err } } else { fullName := rootDir + "/" + fi.Name() s = append(s, fullName) } } return s, nil }