| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package main
- import (
- "fmt"
- "io"
- "io/ioutil"
- "log"
- "os"
- "path/filepath"
- "sort"
- )
- func main() {
- dirTree(os.Stdout, "..", true)
- }
- func dirTree(output io.Writer, currDir string, printFiles bool) error {
- recursionPrintService("", output, currDir, printFiles)
- return nil
- }
- func recursionPrintService(prependingString string, output io.Writer, currDir string, printFiles bool) {
- fileObj, err := os.Open(currDir)
- defer fileObj.Close()
- if err != nil {
- log.Fatalf("Could not open %s: %s", currDir, err.Error())
- }
- fileName := fileObj.Name()
- files, err := ioutil.ReadDir(fileName)
- if err != nil {
- log.Fatalf("Could not read dir names in %s: %s", currDir, err.Error())
- }
- var filesMap map[string]os.FileInfo = map[string]os.FileInfo{}
- var unSortedFilesNameArr []string = []string{}
- for _, file := range files {
- unSortedFilesNameArr = append(unSortedFilesNameArr, file.Name())
- filesMap[file.Name()] = file
- }
- sort.Strings(unSortedFilesNameArr)
- var sortedFilesArr []os.FileInfo = []os.FileInfo{}
- for _, stringName := range unSortedFilesNameArr {
- sortedFilesArr = append(sortedFilesArr, filesMap[stringName])
- }
- files = sortedFilesArr
- var newFileList []os.FileInfo = []os.FileInfo{}
- var length int
- if !printFiles {
- for _, file := range files {
- if file.IsDir() {
- newFileList = append(newFileList, file)
- }
- }
- files = newFileList
- }
- length = len(files)
- for i, file := range files {
- if file.IsDir() {
- var stringPrepender string
- if length > i+1 {
- fmt.Fprintf(output, prependingString+"├───"+"%s\n", file.Name())
- stringPrepender = prependingString + "│\t"
- } else {
- fmt.Fprintf(output, prependingString+"└───"+"%s\n", file.Name())
- stringPrepender = prependingString + "\t"
- }
- newDir := filepath.Join(currDir, file.Name())
- recursionPrintService(stringPrepender, output, newDir, printFiles)
- } else if printFiles {
- if file.Size() > 0 {
- if length > i+1 {
- fmt.Fprintf(output, prependingString+"├───%s (%vb)\n", file.Name(), file.Size())
- } else {
- fmt.Fprintf(output, prependingString+"└───%s (%vb)\n", file.Name(), file.Size())
- }
- } else {
- if length > i+1 {
- fmt.Fprintf(output, prependingString+"├───%s (empty)\n", file.Name())
- } else {
- fmt.Fprintf(output, prependingString+"└───%s (empty)\n", file.Name())
- }
- }
- }
- }
- }
|