Renomear fotos em lote por data de criação no Mac OS X usando Bash que não funciona com espaços

Renomear fotos em lote por data de criação no Mac OS X usando Bash que não funciona com espaços

Estou procurando uma solução sobre como renomear fotos em lote 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 colocar 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 (quero um espaço no nome do arquivo porque tenho renomeado meus arquivos com espaços nos últimos 3 anos no Windows). E também quebra se o próprio arquivo contiver espaço. Portanto, se eu tiver uma foto chamada “Hello World.jpg”, ela não será processada.

Alguém teria uma solução para isso, por favor? De preferência, isso não requer nenhum software adicional (só quero poder copiar/colar esse script sempre que trocar de máquina).

Obrigado!

Responder1

Você precisa usar aspas em 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

Precisa estar entre aspas duplas para permitir variável e $()expansão.

Responder2

Normalmente seria suficiente substituir $ipor "$i".

informação relacionada