##
 
#  walk [ command args ]
# General-purpose directory tree traversal thingy.
# traverse the directory tree starting at cwd and do command in
# each dir. Much slower than find, but much simpler to use, and 
# of course, to modify.
# Also included in cLIeNUX as an example of recursion in sh.
# Works in Bash and ash.

walk () {
    local f
    top_args=$*
    for f in *
   	{ if test -d $f -a ! -L $f; then
         	cd $f
            	walk $top_args
            	cd ../
          fi
    	}
$top_args
}

walk $*

# local has to be in a function, hence the "define and then call"
#   layout. Notice how $f is reentrant, and how top_args gets
#   passed inside, but executed outside the inner call.

## Copyright 2000 Rick Hohensee