Propongo di usare sed per farlo:
NEW=$(echo MyDirectoryFileLine \
| sed 's/\(.\)\([A-Z]\)/\1-\2/g' \
| tr '[:upper:]' '[:lower:]')
AGGIORNAMENTO Ho dimenticato di convertire in minuscolo, codice aggiornato
Puoi usare s/\([A-Z]\)/-\L\1/g
per trovare una lettera maiuscola e sostituirla con un trattino ed è minuscola. Tuttavia, questo ti dà un trattino all'inizio della riga, quindi hai bisogno di un'altra espressione sed per gestirlo.
Dovrebbe funzionare:
sed --expression 's/\([A-Z]\)/-\L\1/g' \
--expression 's/^-//' \
<<< "MyDirectoryFileLine"