uma solução simples e bastante portátil (mas que poderia ser bloqueada em casos especiais de nomes de arquivos ... um mais robusto poderia ser preparado se você tiver uma versão recente do GNU xargs e encontre):
find . \( -name '*(*' -o -name '*)*' \) -print > ze_list
while read a_line ; do
echo mv "$a_line" "$(echo "$a_line" | sed -e 's/(/0000/g' -e 's/)/1111/g')" ;
done < ze_list
Então, se você está confiante de que faria o que queria, tire o 'eco'
(não se preocupe, pois o shell está ocultando as aspas circunvizinhas (") ao usar echo, mas elas estarão lá para garantir que" mv "receba apenas 2 argumentos, uma origem e um destino.
o "$ (.... | ....)" é onde a substituição aparece. As aspas ao redor são importantes para que o nome resultante, mesmo que contenha espaços, ainda seja considerado um (1) argumento.