Thursday, 8 October 2020

Talking with tree - on the Mac

 Now back in the day, I remember a version of DOS or Windows that introduced the tree command that allowed one to produce a pseudo-graphical listing of a file-system.

This nice picture from Wikipedia shows the concept: -


Well, I'd missed that on macOS ...

Now I miss it no longer ....


'twas a simple installation: -

brew install tree

and now: -

which tree

/usr/local/bin/tree

tree --version

tree v1.8.0 (c) 1996 - 2018 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro 

tree --help

usage: tree [-acdfghilnpqrstuvxACDFJQNSUX] [-H baseHREF] [-T title ]
[-L level [-R]] [-P pattern] [-I pattern] [-o filename] [--version]
[--help] [--inodes] [--device] [--noreport] [--nolinks] [--dirsfirst]
[--charset charset] [--filelimit[=]#] [--si] [--timefmt[=]<f>]
[--sort[=]<name>] [--matchdirs] [--ignore-case] [--fromfile] [--]
[<directory list>]
  ------- Listing options -------
  -a            All files are listed.
  -d            List directories only.
  -l            Follow symbolic links like directories.
  -f            Print the full path prefix for each file.
  -x            Stay on current filesystem only.
  -L level      Descend only level directories deep.
  -R            Rerun tree when max dir level reached.
  -P pattern    List only those files that match the pattern given.
  -I pattern    Do not list files that match the given pattern.
  --ignore-case Ignore case when pattern matching.
  --matchdirs   Include directory names in -P pattern matching.
  --noreport    Turn off file/directory count at end of tree listing.
  --charset X   Use charset X for terminal/HTML and indentation line output.
  --filelimit # Do not descend dirs with more than # files in them.
  --timefmt <f> Print and format time according to the format <f>.
  -o filename   Output to file instead of stdout.
  ------- File options -------
  -q            Print non-printable characters as '?'.
  -N            Print non-printable characters as is.
  -Q            Quote filenames with double quotes.
  -p            Print the protections for each file.
  -u            Displays file owner or UID number.
  -g            Displays file group owner or GID number.
  -s            Print the size in bytes of each file.
  -h            Print the size in a more human readable way.
  --si          Like -h, but use in SI units (powers of 1000).
  -D            Print the date of last modification or (-c) status change.
  -F            Appends '/', '=', '*', '@', '|' or '>' as per ls -F.
  --inodes      Print inode number of each file.
  --device      Print device ID number to which each file belongs.
  ------- Sorting options -------
  -v            Sort files alphanumerically by version.
  -t            Sort files by last modification time.
  -c            Sort files by last status change time.
  -U            Leave files unsorted.
  -r            Reverse the order of the sort.
  --dirsfirst   List directories before files (-U disables).
  --sort X      Select sort: name,version,size,mtime,ctime.
  ------- Graphics options -------
  -i            Don't print indentation lines.
  -A            Print ANSI lines graphic indentation lines.
  -S            Print with CP437 (console) graphics indentation lines.
  -n            Turn colorization off always (-C overrides).
  -C            Turn colorization on always.
  ------- XML/HTML/JSON options -------
  -X            Prints out an XML representation of the tree.
  -J            Prints out an JSON representation of the tree.
  -H baseHREF   Prints out HTML format with baseHREF as top directory.
  -T string     Replace the default HTML title and H1 header with string.
  --nolinks     Turn off hyperlinks in HTML output.
  ------- Input options -------
  --fromfile    Reads paths from files (.=stdin)
  ------- Miscellaneous options -------
  --version     Print version and exit.
  --help        Print usage and this help message and exit.
  --            Options processing terminator.

I can even get a tree in JSON format ....

tree -J

[{"type":"directory","name": ".","contents":[
    {"type":"file","name":"pom.xml"},
    {"type":"directory","name":"src","contents":[
      {"type":"directory","name":"main","contents":[
        {"type":"directory","name":"java","contents":[
          {"type":"directory","name":"com","contents":[
            {"type":"directory","name":"dave","contents":[
              {"type":"directory","name":"app","contents":[
                {"type":"file","name":"App.java"}
              ]}
            ]}
          ]}
        ]}
      ]},
      {"type":"directory","name":"test","contents":[
        {"type":"directory","name":"java","contents":[
          {"type":"directory","name":"com","contents":[
            {"type":"directory","name":"dave","contents":[
              {"type":"directory","name":"app","contents":[
                {"type":"file","name":"AppTest.java"}
              ]}
            ]}
          ]}
        ]}
      ]}
    ]},
    {"type":"directory","name":"target","contents":[
      {"type":"directory","name":"classes","contents":[
        {"type":"directory","name":"com","contents":[
          {"type":"directory","name":"dave","contents":[
            {"type":"directory","name":"app","contents":[
              {"type":"file","name":"App.class"}
            ]}
          ]}
        ]}
      ]},
      {"type":"file","name":"daves-app-1.0-SNAPSHOT.jar"},
      {"type":"directory","name":"generated-sources","contents":[
        {"type":"directory","name":"annotations","contents":[
        ]}
      ]},
      {"type":"directory","name":"generated-test-sources","contents":[
        {"type":"directory","name":"test-annotations","contents":[
        ]}
      ]},
      {"type":"directory","name":"maven-archiver","contents":[
        {"type":"file","name":"pom.properties"}
      ]},
      {"type":"directory","name":"maven-status","contents":[
        {"type":"directory","name":"maven-compiler-plugin","contents":[
          {"type":"directory","name":"compile","contents":[
            {"type":"directory","name":"default-compile","contents":[
              {"type":"file","name":"createdFiles.lst"},
              {"type":"file","name":"inputFiles.lst"}
            ]}
          ]},
          {"type":"directory","name":"testCompile","contents":[
            {"type":"directory","name":"default-testCompile","contents":[
              {"type":"file","name":"createdFiles.lst"},
              {"type":"file","name":"inputFiles.lst"}
            ]}
          ]}
        ]}
      ]},
      {"type":"directory","name":"surefire-reports","contents":[
        {"type":"file","name":"TEST-com.dave.app.AppTest.xml"},
        {"type":"file","name":"com.dave.app.AppTest.txt"}
      ]},
      {"type":"directory","name":"test-classes","contents":[
        {"type":"directory","name":"com","contents":[
          {"type":"directory","name":"dave","contents":[
            {"type":"directory","name":"app","contents":[
              {"type":"file","name":"AppTest.class"}
            ]}
          ]}
        ]}
      ]}
    ]}
  ]},
  {"type":"report","directories":32,"files":13}
]

Do I need that ? No, but who cares !! I CAN!!

Colour me happy 😂😂😂

No comments:

Yay, VMware Fusion and macOS Big Sur - no longer "NAT good friends" - forgive the double negative and the terrible pun ...

After macOS 11 Big Sur was released in 2020, VMware updated their Fusion product to v12 and, sadly, managed to break Network Address Trans...