| delorie.com/archives/browse.cgi | search |
| X-Recipient: | archive-cygwin AT delorie DOT com |
| X-Spam-Check-By: | sourceware.org |
| Message-ID: | <4946EE85.4080601@swcp.com> |
| Date: | Mon, 15 Dec 2008 16:55:49 -0700 |
| From: | Lynn Wilson <lynn AT swcp DOT com> |
| User-Agent: | Thunderbird 2.0.0.18 (Windows/20081105) |
| MIME-Version: | 1.0 |
| To: | cygwin AT cygwin DOT com |
| Subject: | Re: Source for Tree command |
| Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
| List-Id: | <cygwin.cygwin.com> |
| List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
| List-Archive: | <http://sourceware.org/ml/cygwin/> |
| List-Post: | <mailto:cygwin AT cygwin DOT com> |
| List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
| Sender: | cygwin-owner AT cygwin DOT com |
| Mail-Followup-To: | cygwin AT cygwin DOT com |
| Delivered-To: | mailing list cygwin AT cygwin DOT com |
You can try using the windows one at: c:/WINDOWS/system32/tree.com
Or you can roll you own as shown below which will also work on *nix machines.
enjoy.
Lynn
=============================
#!/bin/bash
# This scripts graphically displays a file directory structure
# Does NOT work with file names containing embedded spaces!
#
# Written by Lynn R. Wilson March 2001
#
depth=0
let MaxDepth=10000
function TreeHelper()
{
local savethis
savethis="$thisfile"
local saveindent
local printed
printed=
if [ -n "$ShowFiles" ]; then
for file in $* ; do
thisfile="$thisfile/$file"
if [ -f "$thisfile" ]; then
printed="1"
echo -e "$indent|-- $file" # add * at end if you want...
fi
thisfile="$savethis"
done
fi
for file in $* ; do
if [ "$file" = "CVS" ] && [ -n "$ignoreCVS" ]; then
continue
fi
thisfile="$thisfile/$file"
if [ -d "$thisfile" ]; then
if [ -L "$file" ]; then
link=$( ls -al "$file" )
link=${link##*>} # keep everything after last '>'
echo -e "$indent|-- $file/ (symlink)-> $link"
else
echo -e "$indent|-- $file/"
fi
printed="1"
saveindent=$indent
indent="$indent| "
if [ ! -L "$file" ] || [ -n "$FollowLinks" ]; then
let depth=$depth+1
if [ $depth -lt $MaxDepth ] ; then
TreeHelper $( command ls "$thisfile" )
else
echo -e "$indent..."
fi
let depth=$depth-1
fi
indent=$saveindent
fi
thisfile=$savethis
done
if [ -n "$printed" ]; then
echo -e "$indent"
fi
}
# parse the command arguments
# can also be done with ( while getopts ":ip:" opt; do... )
while true; do
if [ "$1" = "-f" ]; then
ShowFiles=1
shift
continue
fi
if [ "$1" = "-L" ]; then
FollowLinks=1
shift
continue
fi
if [ "$1" = "-d" ]; then
shift
MaxDepth=$1
shift
continue
fi
if [ "$1" = "-C" ]; then
ignoreCVS=1
shift
continue
fi
if [ "$1" = "-h" ]; then
echo 'Usage: tree [-f] [-L] [-C] [-d depth] [ path ]'
echo '-f also shows files, -L follows symbolic links, -C ignores CVS'
echo
exit
fi
break
done
if [ -z "$1" ] ; then
here=$( pwd )
else
here=$1
fi
if [ ! -d "$here" ]; then
echo Not a Directory! $here
exit 1
fi
echo Tree rooted at: $here
thisfile=$here
TreeHelper $( command ls "$here" )
exit 0
# end of script
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |