#!/bin/bash

## Checks given folder for files with certain extensions. Subfolders are checked recursively. 
## $1 Folder to check.
## $2 space separated list of extensions to check for. e.g.: "*.jpg *.JPG *.mp4 *.MP4".
## returns Count of files found with the desired extension.

__check_folder() {
	local _FOLDER=$1;
	local _EXTENSIONS=$2;
	local _FILE_C=0;
	if [ -d "$_FOLDER" ]; then	# is a folder
		local _ITEM="";
		local _FC=${#FILESNPATHS[@]};
		pushd "$_FOLDER" 1>/dev/null;
		for _ITEM in ${_EXTENSIONS}; do # lookup all files with the desired extensions
			if [[ -f "$_ITEM" ]]; then # is a file
				FILESNPATHS[$_FC]="$(pwd)/$_ITEM";
 				((_FC+=1));
 				((_FILE_C+=1));
			fi
		done
		# check subfolders if exist
		local _SUBFOLDERS="$(/usr/bin/ls . 2>/dev/null)";
		local _CNT=0;
		for _SUBITEM in ${_SUBFOLDERS}; do
			if [[ -d "$_SUBITEM" ]]; then
				__check_folder "$_SUBITEM" "$_EXTENSIONS";
				_CNT=$?
				((_FILE_C+=_CNT));
			fi
		done
		popd 1>/dev/null;
	fi
	return $_FILE_C
}


__test() {
	MYFOLDER="./cffe_test";
	__check_folder $MYFOLDER "*.jpg *.JPG"  # space separated list for multiple extensions!
	FILE_COUNT=$?
	echo "Found $FILE_COUNT files in folder $MYFOLDER, length of files array is ${#FILESNPATHS[*]}.";
	for ((FILE_C=0;FILE_C<${#FILESNPATHS[*]};FILE_C++)); do
		echo "$FILE_C  ${FILESNPATHS[$FILE_C]}";
	done
}

declare -A FILESNPAHTS;

__test
