Попробуйте это.
rsync -r --include='*.jpg' --exclude="*" /RootFolderI/Folder*/Subfolder1/Subsub1/. /RootFolderII/.
Как сказал Michael Vehrs, ассоциативные массивы bash не сохраняют порядок вставки. Это "особенность" ассоциативных массивов в целом. "Магия" для этого в bash происходит в hashlib.c.
В Bash есть индексированные массивы, которые можно использовать в качестве индикатора порядка вставки:
declare -A REPLACE_MAP
declare -a REPLACE_MAP_INDEX
REPLACE_MAP['b']='2'
REPLACE_MAP_INDEX+=('b')
REPLACE_MAP['a']='1'
REPLACE_MAP_INDEX+=('a')
for key in "${REPLACE_MAP_INDEX[@]}"; do
printf "%s - %s\n" "$key" "${REPLACE_MAP["$key"]}"
value=${REPLACE_MAP["$key"]}
done
Другой вариант, в зависимости от ваших данных, - это одиночный индексированный массив, значения которого представляют собой исходные ключ и значение, объединенные каким-то образом (здесь используется пробел):
unset arr
declare -a arr
arr+=("b 2")
arr+=("a 1")
for ckey in "${arr[@]}"; do
key=${ckey% *}
value=${ckey#* }
printf "%s - %s\n" "$key" "$value"
done
... но если пробел является допустимой частью ключа или значения, то выберите что-нибудь другое, неиспользуемое, например, символ трубы:
unset arr
declare -a arr
arr+=("b|2")
arr+=("a|1")
for ckey in "${arr[@]}"; do
key=${ckey%|*}
value=${ckey#*|}
printf "%s - %s\n" "$key" "$value"
done