Ich schlage vor, dafür sed zu verwenden:
NEW=$(echo MyDirectoryFileLine \
| sed 's/\(.\)\([A-Z]\)/\1-\2/g' \
| tr '[:upper:]' '[:lower:]')
UPD Ich habe vergessen, in Kleinbuchstaben umzuwandeln, aktualisierter Code
Sie können s/\([A-Z]\)/-\L\1/g
verwenden um einen Großbuchstaben zu finden und ihn durch einen Bindestrich und seinen Kleinbuchstaben zu ersetzen. Dadurch erhalten Sie jedoch einen Bindestrich am Anfang der Zeile, sodass Sie einen anderen sed-Ausdruck benötigen, um damit umzugehen.
Das sollte funktionieren:
sed --expression 's/\([A-Z]\)/-\L\1/g' \
--expression 's/^-//' \
<<< "MyDirectoryFileLine"