home *** CD-ROM | disk | FTP | other *** search
/ The UNIX CD Bookshelf / OREILLY_TUCB_UNIX_CD.iso / upt / examples / LINUX / ARCHIVE / STREE.Z / STREE / sbin / stree
Encoding:
Text File  |  1993-01-01  |  1.5 KB  |  49 lines

  1. #! /bin/sh
  2. #
  3. ###    stree - make simple directory tree
  4. ###    Usage: stree [-a] reldirpath
  5. ##
  6. ##    stree IS A SIMPLE WAY TO MAKE A DIRECTORY TREE.  THOUGH THERE ARE
  7. ##    BETTER ONES ELSEWHERE, stree IS SIMPLE AND HAS SOME NEAT USES OF
  8. ##    sed AND tr IN IT.
  9. ##
  10. ##    IF YOU GIVE IT THE PATH TO A DIRECTORY (USE A RELATIVE PATH!):
  11. ##        % stree bin
  12. ##    IT'LL SHOW YOU ONLY THE SUBDIRECTORIES.  WITH THE -a OPTION:
  13. ##        % stree -a bin
  14. ##    IT SHOWS DIRECTORIES AND FILES.
  15. #
  16. #    Posted to USENET by
  17. #        James A. Woods  {hplabs,hao,ihnp4}!ames!jaw  (jaw@riacs.ARPA)
  18. #    Attributed to
  19. #        Doug Kerr of Informatics General Corp.
  20. #
  21. #    Original one-liner (hacked up by Jerry Peek):
  22. #    echo $1; find $1 -type d -print | tr / \\1 | sort -f | tr \\1 / |\
  23. #    sed -e s,\^$1,, -e /\^$/d -e "s,[^/]*/, \"    ,g"
  24. #
  25. #    Explanation:  it works by substituting tabs for pathname slashes
  26. #    (the invisible literal tab occurs before the ",g" above); the
  27. #    translits bracketing the sort helps alphabetize / before [a-zA-Z].
  28. #    And if you remember that other punctuation can replace the slash
  29. #    in ed/sed syntax (as the comma does in the script), you needn't
  30. #    say "Deadhead Ed had edited it" fifty times fast.
  31.  
  32. case "$1" in
  33. -a)    shift
  34.     dir=${1-.}    # DEFAULT TO CURRENT DIRECTORY
  35.     echo Tree for directory $dir and its files:
  36.     ;;
  37. *)    findtype="-type d"     # IF NO -a FLAG, MAKE find USE "-type d"
  38.     dir=${1-.}
  39.     echo Tree for directory $dir:
  40.     ;;
  41. esac
  42.  
  43. echo "
  44. $dir"
  45. find $dir $findtype -print |
  46. tr / \\001 | sort -f | tr \\001 / |
  47. sed -e s@\^$dir@@ -e /\^$/d -e 's@[^/]*/@ "    @g'
  48. # THIS CHARACTER IS A TAB..................^
  49.