#!/bin/sh
#find value directory name in all directories
USAGE="fdir [d] [directory] fileName"
helpFile="$HOME/lbin/fname.txt"
# you should not use `getopt abo: "$@"` since that would parse
# the arguments differently from what the set command below does.
ARGS=`getopt d:D:fFlLxXHh $@`
if [ $? != 0 ]
then
	echo 'BAD USAGE Usage: ...'
	cat $helpFile
	exit 98
fi
findVal="$*";
set -- $ARGS
# You cannot use the set command with a backquoted getopt directly,
# since the exit code from getopt would be shadowed by those of set,
# which is zero by definition.

cmdNum=0 #Used to show what cmd to run - Default Value
fileType="d" #default look only for directory
depth="X"

for i
do
	case "$i"
	in
		 -h| -H)
			cmdText=" Show Help Information "
			cat $helpFile
			exit 97;
			;;
		-d | -D )
			cmdNum=1;
			cmdText=" find ALL DIRECTORIES at Depth: $2 ONLY "
			# find all directory names
			fileType="d"
			#find $dirName -type $fileType -depth $2 -print
			#find .  -type d -depth 1 -print
			#exit
			depth=$2;
			fileName=$4
			# get past argument
			shift;
			shift;
			break;
			;;
		-f | -F )
			cmdNum=2;
			cmdText=" find ALL File "
			# find all file names
			shift;
			findVal="$*";
			set -x
			find $findVal -type f -print
			set +x
			break;
			;;
		-l | -L )
			cmdNum=3;
			cmdText=" List all File info "
			# List all file info for files found
			shift;
			break;
			;;
		-x | -X )
			cmdNum=4;
			cmdText=" Find files with EXACT MATCH ONLY! "
			#find Exact match only - do not add *$fileName*
			shift;
			break;
			;;
		--)
			cmdNum=0;
			cmdText=" Find files with WILDCARD MATCH! "
			echo "In Default END DO NOTHING"
			shift;
			break; 
			#NOT RUN HERE find . -type f  -iname "$findVal" -print 
			;;
	esac
done
argc="$#"
#if [ $count -gt 0 ]; then
### echo "#### 1 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 1 ####"
if [ $1 = "--" ] ;
then
### 	echo "\n##### NEEEEEED SHIFT ##### "
### echo "#### 2 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 2 ####"
	shift
fi
if [ $argc = 0 ] ;
then
	echo "Help";
### echo "#### 3 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 3 ####"
	cat $helpFile
	exit 96;
elif [ $argc = 1 ] ; then  # -l DOES NOT WORK
	dirName="."
	fileName="$1"
elif [ $argc = 2 ] ; then #-l works 
	#-l DOES NOT WORK
	# -d dirname dir NOT WORKING
	dirName="$1"
	fileName="$2"
		echo "cmd=$cmdNum"
	if [ $cmdNum = 3 ]; then
		dirName="."
		fileName="*$1*"
### echo "#### 4 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 4 ####"
	elif [ ! -d $dirName ]; then
		echo "ERROR: $dirName does not exist!!!(dirName)"
### echo "#### 5 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 5 ####"
		exit 95;
	fi
else
	echo "two args"
### echo "#### 5 ####\nARGS=$ARGS \ndirName=$dirnName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc CMD= $0 $*\n#### 5 ####"
	dirName="$1"
	fileName="$2"
fi
if [ $cmdNum = 0 ]; then
	#make Wild Card Search
	fileName="*$fileName*"
fi
#echo "1=$1 2=$2 3=$3"
#echo "dirName=$dirName fileName=$fileName arg3=$3"
### echo "#### 6 ####\nARGS=$ARGS \nCurrentArgs=$*\narg0=$0\narg1=$arg1 dirName=$dirName fileName=$fileName \n cmdNum=$cmdNum cmdText=$cmdText \nARGC = $argc \$0= $0\n \$1 = $1 \$2 = $2\n#### 6 ####"
#echo "Cmd to RUN= $cmdNum"
echo "Looking for file (${fileName}) in directory (${dirName}) $cmdText";
if [ $cmdNum = 3 ]; then
	#get directory details ls -ld
	echo "Looking to Long Listing: "
	set -x
#	find $dirName -type $fileType -iname "$fileName" -print0 | xargs -0 ls -ld 2>&/tmp/errors.log
	find $dirName -type $fileType  -exec ls -ld {} \;
	set +x
	rtn="$?"
else
	set -x
	if [ $depth != "X" ] ; 
	then	
		if [ -z $fileName ] ; 
		then
			find $dirName -type $fileType  -depth $depth -print
		else
			find $dirName -type $fileType -iname "$fileName" -depth $depth -print
		fi	
	else
		find $dirName -type $fileType -iname "$fileName" -print
	fi
	rtn="$?"
	set +x
	echo "CMD=" . "find $dirName -type $fileType -iname $fileName -print"
fi
echo "RTN=$rtn"
##ALT NOT USED find $1 -type f  -iname "*$2*" -print | xargs grep -iH "$2" 2>/dev/null
