package main import ( "fmt" "io/fs" "path/filepath" "flag" ) func main() { var recurse bool flag.BoolVar(&recurse, "R", false, "recursive listing") flag.Parse() paths := flag.Args() if len(paths) == 0 { paths = append(paths, ".") } for _, what := range paths { if flag.NArg() > 1 { fmt.Printf("\n%s:\n", what) } filepath.WalkDir(what, func (path string, d fs.DirEntry, err error) error { if path == what { return nil } if d.IsDir() && recurse { fmt.Printf("\n%s:\n", path) } else if d.IsDir() { fmt.Printf("%s\n", filepath.Base(path)) return fs.SkipDir } else { fmt.Printf("%s\n", filepath.Base(path)) } return nil }) } }