A substituição de comandos ( '...'
ou $(...)
) é dividida em caractere de nova linha, tabulação e espaço (não apenas nova linha) e geração de nome de arquivo (globbing) é executada em cada palavra resultante dessa divisão. Esse é o operador split + glob . Você poderia melhorar as coisas configurando $IFS
para nova linha e desativando globbing, mas aqui, o melhor é escrever da maneira correta:
find . -name "*.jpg" -type f -exec sh -c '
for i do
cp "$i" "${i%.*}-fanart.jpg"
done' sh {} +
Você também pode usar pax
para isso:
pax -rws'/\.jpg$/-fanart&/' -s'/.*//' . .
Ou zmv do zsh
:
autoload zmv
zmv -QC '(**/)(*)(.jpg)(D.)' '$1$2-fanart$3'