Table of Contents

Ubuntu - Bash - Scripts - tree

tree recursively searches in each directory and finds all files, which are then displayed in a hierarchical file tree, thus providing global inspection of files and their nested depth structure.


Usage

tree [dir]

Example call:

tree $HOME

Code

#!/bin/bash
#
# @ (#) tree v1.0 Visual display of a file tree 
# output to a file tree structure screen
#
 
if [ "$#" -gt 1]
then echo "tree: wrong arg count"> & 2
echo "usage: tree [dir]"> & 2
exit 2
fi
 
if [ "$#" -eq 1]
 then if [! -d $1]
 then echo "$0: $1 not a directory"> & 2
 echo "usage: tree [dir]"> & 2
 exit 2
 fi
fi
 
find $ {1: -.} -print | sort | sed -e "1p" -e "1d" \
 -e "s | [^ /] * / | / | g" \
 -e "s | [^ * / | / |" \
 -e "s | / \ ([^ /] * \) $ | \ 1 |"

Example Usage

This uses an implicit directory (the current directory) as the beginning of the file tree.

tree

Print the tree listing for each file of the entire system.

tree /

This shows the tree-format for all other users system (assuming that all user directories are the same directory, such as /usr/*).

tree $HOME / ..

Test

Consider the example of a directory structure. Let the root directory to /tmp with two directories: a and b. The catalog is a subdirectories log aa, which contains the file1 file directory and b, respectively, subdirectory bb, containing file file2.

The find command will give a printout like this:

find /tmp -print

result:

/tmp
/tmp/a
/tmp/a/aa
/tmp/a/aa/file1
/tmp/b
/tmp/b/bb
/tmp/b/bb/file2

As can be seen from this listing, the files a and aa are directories and file file1 is located at the bottom of the file tree.


Now compare this result with the results of the tree script.

tree /tmp

result:

/tmp
/a
//aa
///file1
/b
//bb
///file2