Renomeie várias pastas usando regex

Renomeie várias pastas usando regex

Como o título diz, estou procurando um comando/ferramenta - de preferência algo rodando no terminal (estou usando o Ubuntu em um servidor remoto), que possa substituir uma parte específica de vários diretórios de uma só vez. A estrutura de pastas é assim:

Example.of.Structure[app]

Another.Example[app]

Third.Example.of.Structure[app]

E quero renomear todas as pastas, para que a parte [app] seja removida dos nomes das pastas.

Eu tentei brincar com RegEx básico. Combinando os colchetes e o texto dentro deles.

O que parece funcionar bem, quando eu uso para"encontrando"- mas não tenho certeza de como colocá-lo em um comando.

A regex que criei para encontrar o texto entre colchetes (incluindo os próprios colchetes) foi:\[\w+\]

Mas como coloco isso em um comando?

Obrigado.

Responder1

Você realmente não precisa de um regex para isso. Um simples shell glob mais expansão de parâmetro resolverá isso:

$ for f in *\[*\]/; do echo mv "${f}" "${f/\[*\]}"; done
mv Another.Example[app]/ Another.Example/
mv Example.of.Structure[app]/ Example.of.Structure/
mv Third.Example.of.Structure[app]/ Third.Example.of.Structure/

(remova echoquando estiver satisfeito com a correção das substituições propostas).

Se você quiser usar uma ferramenta baseada em regex, então a baseada em perl rename/prenameé a escolha óbvia:

$ rename -n 's/\[\w+\]//' */
rename(Another.Example[app]/, Another.Example/)
rename(Example.of.Structure[app]/, Example.of.Structure/)
rename(Third.Example.of.Structure[app]/, Third.Example.of.Structure/)

(remova -nquando estiver satisfeito com a correção das substituições propostas).

Ambos correspondem aoprimeiroocorrência do padrão. Se houver a possibilidade de o [app]padrão ocorrer em outro lugar, tente ancorar a correspondência no final do padrão. VerÂncoras de início e fim de corda

informação relacionada