Permalink
Browse files

tree.sh - a tool script display the dir tree.

  • Loading branch information...
1 parent 718e1b5 commit 8ec18e3c3b1ff275c33e053abc1261a9c4471001 @soarpenguin committed Jan 2, 2014
Showing with 59 additions and 0 deletions.
  1. +59 −0 bashrc/tree.sh
View
@@ -0,0 +1,59 @@
+#!/bin/bash
+# tree.sh
+
+# Written by Rick Boivie. Used with permission.
+# This is a revised and simplified version of a script
+# by Jordi Sanfeliu (and patched by Ian Kjos).
+# This script replaces the earlier version used in
+# previous releases of the Advanced Bash Scripting
+# Guide.
+
+# ==> Comments added by the author of this document.
+
+
+search () {
+ for dir in `echo *`
+ # ==> `echo *` lists all the files in current working directory,
+ #+ ==> without line breaks.
+ # ==> Similar effect to for dir in *
+ # ==> but "dir in `echo *`" will not handle filenames with blanks.
+ do
+ if [ -d "$dir" ] ; then # ==> If it is a directory (-d)...
+ zz=0 # ==> Temp variable, keeping track of directory level.
+ while [ $zz != $1 ] # Keep track of inner nested loop.
+ do
+ echo -n "| " # ==> Display vertical connector symbol,
+ # ==> with 2 spaces & no line feed in order to indent.
+ zz=`expr $zz + 1` # ==> Increment zz.
+ done
+
+ if [ -L "$dir" ] ; then # ==> If directory is a symbolic link...
+ echo "+---$dir" `ls -l $dir | sed 's/^.*'$dir' //'`
+ # ==> Display horiz. connector and list directory name, but...
+ # ==> delete date/time part of long listing.
+ else
+ echo "+---$dir" # ==> Display horizontal connector symbol...
+ # ==> and print directory name.
+ numdirs=`expr $numdirs + 1` # ==> Increment directory count.
+ if cd "$dir" ; then # ==> If can move to subdirectory...
+ search `expr $1 + 1` # with recursion ;-)
+ # ==> Function calls itself.
+ cd ..
+ fi
+ fi
+ fi
+ done
+}
+
+if [ $# != 0 ] ; then
+ cd $1 # move to indicated directory.
+ #else # stay in current directory
+fi
+
+echo "Initial directory = `pwd`"
+numdirs=0
+
+search 0
+echo "Total directories = $numdirs"
+
+exit 0

0 comments on commit 8ec18e3

Please sign in to comment.