Você precisa usar aspas nas suas substituições:
for i in *.jpg; do newname="$(stat -t %Y-%m-%d_%H.%M.%S -f %Sm -- "$i")"; mv -- "$i" "$newname.jpg"; done
Ele precisa ser aspas duplas para permitir a expansão e a $()
de expansão.
Estou procurando uma solução para renomear em lote as fotos no Mac OS X. Encontrei muitas soluções, mas a maioria delas não funciona se o arquivo tiver um espaço ou se eu quiser coloque um espaço no nome do arquivo.
Por exemplo, encontrei este script:
for i in *.jpg; do newname=$(stat -t %Y-%m-%d_%H.%M.%S -f %Sm -- $i); mv -- $i $newname.jpg; done
O script funciona desde que eu não coloque um espaço no nome do arquivo final (eu quero um espaço no nome do arquivo porque eu tenho renomeado meus arquivos com espaços nos últimos 3 anos no Windows). E também quebra se o arquivo em si tiver um espaço nele. Então, se eu tiver uma foto chamada "Hello World.jpg", ela não será processada.
Alguém teria uma solução para isso, por favor? Isso, de preferência, não requer nenhum software adicional (eu só quero poder copiar / colar esse script toda vez que eu alternar as máquinas).
Obrigado!
Normalmente, seria suficiente substituir $i
por "$i"
.