1#! /bin/bash
2#From: kaz@cafe.net (Kaz Kylheku)
3#Newsgroups: comp.unix.shell
4#Subject: Why not roll your own @#$% find! (was: splitting directory off from filename)
5#Message-ID: <6n1117$tp1@espresso.cafe.net>
6#Date: Fri, 26 Jun 1998 20:47:34 GMT
7
8# $1 = dirname, $2 = pattern, optional $3 = action
9xfind()
10{
11	local x
12	local dir="$1"
13
14	# descend into specified directory
15
16	builtin cd -L "$1" || {
17		echo "${FUNCNAME}: cannot change dir to $1" >&2
18		return 1
19	}
20
21	#
22	# default action is to print the filename
23	#
24	if [ -n "$3" ]; then
25		action="$3"
26	else
27		action='printf -- "%s\n"'
28	fi
29
30	# process ordinary files that match pattern
31
32	for x in $2 ; do 
33		if [ -f "$x" ] ; then
34			eval "$action" "$x"
35		fi
36	done
37
38	# now descend into subdirectories, avoiding symbolic links
39	# and directories that start with a period.
40
41	for x in * ; do
42		if [ -d "$x" ] && [ ! -L "$x" ] ; then 
43			$FUNCNAME "$x" "$2" "$action"
44		fi
45	done
46
47	# finally, pop back up
48
49	builtin cd -L ..
50}
51
52#xfind "$@"
53