func FindFilesRecursive()

in dev-tools/mage/fmt.go [78:107]


func FindFilesRecursive(match func(path string, info os.FileInfo) bool) ([]string, error) {
	var matches []string
	walkDir := func(path string, d fs.DirEntry, err error) error {
		if err != nil {
			return err
		}

		// Don't look for files in git directories
		if d.IsDir() && filepath.Base(path) == ".git" {
			return filepath.SkipDir
		}

		info, err := d.Info()
		if err != nil {
			return fmt.Errorf("canot get FileInfo: %w", err)
		}
		if !info.Mode().IsRegular() {
			// continue
			return nil
		}

		if match(filepath.ToSlash(path), info) {
			matches = append(matches, path)
		}
		return nil
	}

	err := filepath.WalkDir(".", fs.WalkDirFunc(walkDir))
	return matches, err
}