Voor jou toepassing kan volgende oneliner wellicht volstaan:
find "$path_music" -iname "$letter*" -exec basename "{}" \;
Voor het algemene geval zie ik
hier een constructie als volgt:
find "$path_music" -iname "$letter*" -print0 | while IFS= read -r -d $'\0' file; do
basename "$file"
done
Waarom het met jou specifieke constructie niet lukt, is mij niet duidelijk: bash is een ingewikkeld ding. Het is alsof de loop maar één keer loopt, en basename dus alles afstript voor de laatste bestandsnaam. Door anderzijds de quotes rond "find" te verwijderen, worden bestandsnamen met spatie uiteengehakt.