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

2

Eu preciso renomear nomes de arquivos que começam com "foo" em "boo"

Este é o script que usei

#!/bin/sh


for f in *.jpg;
do

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


done

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

    
por DesirePRG 25.04.2013 / 09:07

1 resposta

6

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

Basta mudá-lo e tudo deve funcionar.

Veja também man rename (às vezes chamado de prename onde rename é o do util-linux). Isso deve fazer exatamente o que você precisa:

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

Se você usou /bin/sh intencionalmente, você pode usar:

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

Dê uma olhada no man sh para detalhes.

    
por 25.04.2013 / 09:16

Tags