Here's a simple script that prints a directory tree. It works on any terminal, can be printed or sent in a mail message, and so on. If you don't give stree a directory name, it starts at the current directory. If you give it a -a (all) option, the stree script lists all files, directories, symbolic links, etc. Otherwise, it just lists directories. For example:
%stree lib
Tree for directory lib: lib " at_cron " " RCS " " test " csh " ksh " RCS.Z " tmac " " mm " " " RCS " " ms " " " RCS
The top-level directory is listed along the left-hand edge.
The first level of subdirectories is indented by one tabstop.
A ditto mark ("
) below a name means "same parent directory as above."
So, for example, the last directory in that listing is lib/tmac/ms/RCS.
Here's the script:
${1-.} "newline @ | #! /bin/sh case "$1" in -a) shift dir=${1-.} # DEFAULT TO CURRENT DIRECTORY echo Tree for directory $dir and its files: ;; *) findtype="-type d" # IF NO -a FLAG, MAKE find USE "-type d" dir=${1-.} echo Tree for directory $dir: ;; esac echo " $dir" find $dir $findtype -print | tr / \\001 | sort -f | tr \\001 / | sed -e s@\^$dir@@ -e /\^$/d -e 's@[^/]*/@ "[TAB]@g' |
---|
The script uses
tr (35.11)
to change slash (/
) characters into CTRL-a (octal 001 (51.3))
during the sort.
That makes the slashes sort before letters and other characters
so the directory names will always come out before their contents.
-