#!/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. function check_folder() { local _folder=$1; local _extensions=$2; local _file_count=0; if [ -d "$_folder" ]; then # is a folder local _item=""; local _fc=${#Files_N_Paths[@]}; pushd "$_folder" 1>/dev/null; for _item in ${_extensions}; do # lookup all files with the desired extensions if [[ -f "$_item" ]]; then # is a file Files_N_Paths[$_FC]="$(pwd)/$_item"; ((_fc+=1)); ((_file_count+=1)); fi done # check subfolders if exist local _sub_folders="$(/usr/bin/ls . 2>/dev/null)"; local _cnt=0; for _sub_item in ${_sub_folders}; do if [[ -d "$_sub_item" ]]; then check_folder "$_sub_item" "$_extensions"; _cnt=$? ((_file_count+=_cnt)); fi done popd 1>/dev/null; fi return $_file_count } ## Test the check_folder() function with local test folder and images. function test() { local _my_folder="./cffe_test"; check_folder $_my_folder "*.jpg *.JPG" # space separated list for multiple extensions! local _files_count=$? echo "Found $_files_count files in folder $_my_folder, length of files array is ${#Files_N_Paths[*]}."; for ((_fc=0;_fc<${#Files_N_Paths[*]};_fc++)); do echo "$_fc : ${Files_N_Paths[$_fc]}"; done } declare -A Files_N_Paths; test