Se você puder usar o Bash, o script a seguir deverá fazer o que você deseja:
#!/bin/bash
(( $# != 2 )) && exit 1
for f in *; do
newf="${f//$1/$2}"
if [[ $f != $newf ]]; then
mv "$f" "$newf"
fi
done
Ele tenta substituir o nome do arquivo pela nova string, se o nome do arquivo resultante não corresponder ao original, ele renomeia o arquivo para o nome do arquivo resultante.
Uso, se salvo como replacestr
e determinado modo a ser executado:
$ ./replacestr abc def
Ele tentará renomear todos. Você pode usar [[ ! -f $f ]]
para pular o não-arquivo. Você também pode envolvê-lo na função e obtê-lo do seu ~/.bashrc
se precisar disso com muita frequência.