func listCollect(fs vfs.Filesystem, realPath, virtualPath string, filter FilterFile) ([]string, error) { files := []string{} contents, err := fs.ReadDir(realPath) if err != nil { return nil, err } sort.Sort(byName(contents)) for _, content := range contents { if content.IsDir() { if filter(virtualPath+content.Name(), true) { subfiles, err := listCollect(fs, realPath+content.Name()+"/", virtualPath+content.Name()+"/", filter) if err != nil { return nil, err } files = append(files, subfiles...) } } else { if filter(virtualPath+content.Name(), false) { files = append(files, virtualPath+content.Name()) } } } return files, nil }