`
xifengtaizi
  • 浏览: 10756 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

tree.ksh

    博客分类:
  • UNIX
 
阅读更多
#!/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
  else

  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

    echo `pwd`/$dir

  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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics