Je propose d'utiliser sed pour faire cela :
NEW=$(echo MyDirectoryFileLine \
| sed 's/\(.\)\([A-Z]\)/\1-\2/g' \
| tr '[:upper:]' '[:lower:]')
UPD J'ai oublié de convertir en minuscules, code mis à jour
Vous pouvez utiliser s/\([A-Z]\)/-\L\1/g
pour trouver une lettre majuscule et la remplacer par un tiret et sa minuscule. Cependant, cela vous donne un tiret au début de la ligne, vous avez donc besoin d'une autre expression sed pour gérer cela.
Cela devrait fonctionner :
sed --expression 's/\([A-Z]\)/-\L\1/g' \
--expression 's/^-//' \
<<< "MyDirectoryFileLine"