Eu vejo dois problemas: primeiro, você precisa do comando find para procurar nomes com espaços no início, em vez de no final ( -name ' *' em vez de -name '* ' ). Segundo, f será o caminho completo para o arquivo, não apenas seu nome; Isso significa que os espaços não estão no início da string, eles estão logo após a última barra (por exemplo, "/ Users / timoto / Desktop / spacedfile"). Isso é um pouco mais complicado de lidar; a maneira mais fácil que pensei foi dividir o caminho usando dirname e basename e remover os espaços iniciais apenas da parte base.
Além disso, não deve haver necessidade de executar o comando 9 vezes em diferentes profundidades; basta usar a opção -depth (sem um número) e ela retornará resultados em primeira ordem (ou seja, os arquivos mais profundos antes de seus diretórios), o que evitará que problemas com diretórios sejam renomeados de processar os arquivos neles .
IFS=$'\n'
find ~/Desktop -name ' *' -depth | while read f; do
mv "$f" "$(dirname "$f")/$(basename "$f" | sed 's/^ *//;s/ *$//')"
done
EDIT: meu comando basename / sed foi muito mais complexo do que precisa ser; simplificou isso ...