Eu faria algumas pequenas modificações no seu script. Primeiro, não use ls no seu loop for , use *.csv porque o glob manipulará caracteres não imprimíveis e espaços nos nomes dos arquivos. Em vez de usar o redirecionamento inplace do sed para $file.bak . Se strings estiver disponível em seu sistema, substitua sed por strings . E lembre-se sempre de citar variáveis.
for file in *.csv
do sed 's/^M//' "$file" > "${file}.bak"
#strings "$file" > "${file}.bak"
iconv -f -iso-8859-1 -t utf8 "${file}.bak" > "$file"
rm "${file}.bak"
done