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 ...