Seu uso de rename
pode não funcionar em todos os lugares. Outra maneira de conseguir isso é usar find
, mv
e alguma substituição de bash.
find . -name '*.foo' -exec bash -c 'mv "$0" "${0%.foo}.foo1"' "{}" \;
Algumas coisas a serem observadas:
Eu uso -exec
e não -execdir
. O último efetivamente cd
s para o diretório do arquivo correspondente (que não é o que você deseja, porque o caminho para o arquivo - que será relativo a .
- não estará mais correto). Você deseja apenas -exec
, que executará o comando especificado para cada arquivo que corresponda a -name '*.foo'
(substituindo {}
pelo caminho do arquivo correspondente).
"${0%.foo}"
retira a extensão .foo
, por isso, se $0
for "hello.foo"
, então "${0%.foo}"
será igual a "hello"
. Em seguida, adicionar .foo1
ao final apenas acrescenta isso, então "${0%.foo}.foo1"
é "hello.foo1"
.