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.