package main import ( "errors" "os" "path/filepath" "regexp" "strings" ) func queryPath(path string, cb func(string) bool) error { return filepath.Walk(path, func(path string, f os.FileInfo, err error) error { if f == nil { return err } if f.IsDir() { return nil } if cb(path) { return nil } return errors.New("call cb return false") }) } func findPath(path, expr string) (list []string, err error) { list = make([]string, 0) reg, e := regexp.Compile(expr) if e != nil { err = e return } err = queryPath(path, func(path string) bool { if expr == "" || reg.MatchString(path) { list = append(list, path) } return true }) return } func splitPath(p string) (dir, name, ext, namewithoutext string) { dir, name = filepath.Split(p) ext = filepath.Ext(name) n := strings.LastIndex(name, ".") if n > 0 { namewithoutext = name[:n] } return }