Como renomear todas as subpastas com um nome específico

1

Como percorrer todas as subpastas e renomear todas as pastas com o nome "Antigo" para "Novo"

    
por shane 11.06.2010 / 21:31

2 respostas

1

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.

    
por 11.06.2010 / 21:34
1

Algo parecido com isto:

find . -type d -exec rename <rename options> \;

As opções de renomeação irão variar dependendo de qual rename você tem. A renomeação da Red Hat usa rename Old New {} , enquanto os sistemas Debian / Ubuntu usam frequentemente "renomear Perl", que usaria esta sintaxe:

rename 's/^Old$/New/' {} 

Isso só altera as correspondências exatas para "Antigo". use s/Old/New/g se você quiser alterar todas as ocorrências de "Antigo" para "Novo", incluindo várias ocorrências dentro de um nome de pasta.

    
por 11.06.2010 / 21:36

Tags