O principal problema é que você faz um loop pela saída do comando ls . Use glob * em vez disso:
#!/bin/sh
cd ~/Data
for i in *; do
echo "$i"
filename="$i"
date=$(date -n +%Y-%m-%d)
new_filename="${date}${filename}"
echo mv "${filename}" "${new_filename}"
mv -- "${filename}" "${new_filename}"
done
Além disso, adicionei -- a mv para tratar corretamente os arquivos cujos nomes começam com - . E btw meu comando date não tem -n opção, mas deixo como você pode ter versão diferente.