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" .