diff --git a/utils/file.go b/utils/file.go index c1df707..21932ad 100644 --- a/utils/file.go +++ b/utils/file.go @@ -25,7 +25,7 @@ func StringToFile(path, content string) error { // rootDir: 文件夹根目录 // s: 存储文件名的切片 // filter: 过滤条件:".git", ".idea", ".vscode", ".gitignore", ".gitea", ".github", ".golangci.yml", "*.pyc" -func FileTree(rootDir string, s []string, filter []string) ([]string, error) { +func FileTreeByFilter(rootDir string, s []string, filter []string) ([]string, error) { rd, err := os.ReadDir(rootDir) if err != nil { return s, err @@ -50,7 +50,48 @@ func FileTree(rootDir string, s []string, filter []string) ([]string, error) { if fi.IsDir() { fullDir := rootDir + "/" + fi.Name() - s, err = FileTree(fullDir, s, filter) + s, err = FileTreeByFilter(fullDir, s, filter) + if err != nil { + return s, err + } + } else { + fullName := rootDir + "/" + fi.Name() + s = append(s, fullName) + } + } + return s, nil +} + +// 递归遍历文件夹 +// rootDir: 文件夹根目录 +// s: 存储文件名的切片 +// allow: 允许条件:".zip", ".check" +func FileTreeBySelect(rootDir string, s []string, allow []string) ([]string, error) { + rd, err := os.ReadDir(rootDir) + if err != nil { + return s, err + } + for _, fi := range rd { + // 检查文件名是否匹配任何一个过滤模式 + matched := false + for _, item := range allow { + 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 = FileTreeBySelect(fullDir, s, allow) if err != nil { return s, err }