substituição de parâmetro shell para renomear arquivos

substituição de parâmetro shell para renomear arquivos

Preciso renomear nomes de arquivos que começam com "foo" para "boo"

Este é o script que usei

#!/bin/sh


for f in *.jpg;
do

mv -- "{$f}" "${f/foo/boo}";


done

mas quando executo recebo um erro de substituição incorreto. qual é o problema no meu código?

Responder1

Você está usando /bin/shcomo um shell, que parece aceitar apenas recursos simples do sh. Recursos avançados como ${//}extensões estão disponíveis apenas em shells como o bash.

Basta mudar seu shebang e tudo deve funcionar.

Também dê uma olhada em man rename(às vezes chamado prenamede onde renameestá o do util-linux). Isso deve fazer exatamente o que você precisa:

rename 's/^foo/boo/' foo*.jpg

Se você usou /bin/shintencionalmente, você pode usar:

mv -- "$f" "boo${f#foo}"

Dê uma olhada em man sh para obter detalhes.

informação relacionada