func FindFilesWithPattern()

in cli/util/file.go [51:95]


func FindFilesWithPattern(dir string, pattern string, skipPaths []string) ([]string, error) {
	f, err := os.Stat(dir)
	if err != nil {
		return nil, fmt.Errorf("no such dir: %w", err)
	}
	if !f.IsDir() {
		return nil, fmt.Errorf("expected dir %s: got file", dir)
	}

	re, err := regexp.Compile(pattern)
	if err != nil {
		return nil, fmt.Errorf("invalid regex: %w", err)
	}

	filePaths := []string{}

	err = filepath.WalkDir(dir, func(path string, file fs.DirEntry, err error) error {
		if err != nil {
			return err
		}

		if !re.MatchString(filepath.Base(path)) {
			return nil
		}

		for _, p := range skipPaths {
			if strings.Contains(path, p) {
				return nil
			}
		}

		if !file.IsDir() {
			filePaths = append(filePaths, path)
		}

		return nil
	})

	if err != nil {
		fmt.Printf("error accessing the path: %q. error: %v", dir, err)
		return nil, err
	}

	return filePaths, nil
}