Se você tiver zsh :
autoload zmv
zmv -QW '**/Old(/)' '**/New'
zmv -W '**/Old' '**/New'
Aqui autoload zmv carrega o script zmv que vem com o zsh; zmv -W pattern replacement significa «para cada correspondência, lembre-se do valor de todos os curingas em pattern e substitua os caracteres curinga correspondentes em replacement por esse valor»; zmv -Q significa «permitir qualificadores glob no padrão»; '**/Old' significa «corresponde a todos os arquivos denominados« Antigo »na árvore sob o diretório atual» e o coeficiente (/) glob restringe «todos os arquivos» a serem apenas diretórios. Outras opções úteis de zmv :
-
-n: não faça nada, apenas imprima o que será feito. -
-i: mostra cada linha a ser executada e pergunta se deve ser executada -
-f: forçar a sobrescrita de arquivos de destino
Se você preferir [ba] sh:
RnAll() { for f in "$1"/* ; do [ -d "$f" ] || continue ; ( RnAll "$f" "$2" "$3" ) ; [ "'basename $f'" \== "$2" ] && mv "$f" "'dirname $f'/$3" ; done }
RnAll . Old New
Esta é uma solução quase sh (ou pelo menos bash), que não requer nada além de shell e coreutils.