Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "io"
- "os"
- "sort"
- )
- func main() {
- out := os.Stdout
- if !(len(os.Args) == 2 || len(os.Args) == 3) {
- panic("usage go run main.go . [-f]")
- }
- path := os.Args[1]
- printFiles := len(os.Args) == 3 && os.Args[2] == "-f"
- err := dirTree(out, path, printFiles)
- if err != nil {
- panic(err.Error())
- }
- }
- func dirTree(out io.Writer, path string, withFiles bool) error {
- return dirTreeLeveled(out, path, withFiles, 0)
- }
- // todo
- func dirTreeLeveled(out io.Writer, path string, withFiles bool, level int) error {
- dir, err := os.Open(path)
- if err != nil {
- return err
- }
- files, err := dir.Readdir(0)
- sort.Slice(files, func(i, j int) bool {
- return files[i].Name() < files[j].Name()
- })
- for i, f := range files {
- if (!withFiles && !f.IsDir()) {
- continue
- }
- for j := 0; j < level; j++ {
- fmt.Print("\t")
- }
- if i == len(files)-1 {
- fmt.Print("└───")
- } else {
- fmt.Print("├───")
- }
- fmt.Printf("%s\n", f.Name())
- if (f.IsDir()) {
- errInner := dirTreeLeveled(out, path+string(os.PathSeparator)+f.Name(), withFiles, level+1)
- if errInner != nil {
- return errInner
- }
- }
- }
- return nil
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement