package ls import( "os" "fmt" "flag" "strings" ) var( dirFlag bool foldLvl int ) func IsDir(p string) (bool, error) { finfo, e := os.Stat(p) if e != nil { return false, e } return finfo.IsDir(), e } func ReadDir(p string) ([]os.FileInfo, error) { f, e := os.Open(p) if e != nil { return nil, e } l, e := f.Readdir(-1) if e != nil { return nil, e } f.Close() return l, nil } func Stat(p string) (os.FileInfo, error) { f, e := os.Open(p) if e != nil { return nil, e } s, e := f.Stat() f.Close() return s, nil } func ls(p string, fold int) error { isDir, e := IsDir(p) if e != nil { return e } pp := strings.TrimRight(p, "/") if !isDir || dirFlag || fold<1 { fmt.Println(pp); }else{ l, e := ReadDir(pp) if e!=nil { return e } for _, f := range l { s := pp+"/"+f.Name() if b, _:=IsDir(s) ; b { fmt.Println(s) } if 0