|
@@ -0,0 +1,84 @@
|
|
|
|
|
+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())
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|