Для директорий нужен флаг: -r
Всегда стоит экранировать переменные двойными кавычками:
cp -r "$dir/a/src" "$dir/b/"
Это решит проблемы с пробелами и другими спец. символами...
Как вариант, можно воспользоваться автодополнением баш, написав/скопировав начало имени и нажимая таб.
В этом случае баш сам экранирует всё необходимое с помощью "\":
cp -r /home/user/Рабочий\ стол/a/dir /home/user/Рабочий\ стол/b/