www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2008/12/16/08:23:21

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/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019