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.