Correspondência () com um regex Unix/Linux

Correspondência () com um regex Unix/Linux

Eu tenho alguns arquivos com o nome

(a).1
(a).2
...
(a).100

Como muitas ferramentas de processamento não gostam muito (do )nome do arquivo, achei melhor renomeá-las com um nome diferente. Pesquisei no Google para renomear arquivos e encontrei uma ferramenta maravilhosa renameonde posso alimentar uma expressão regular. Ok, vamos tentar isso:

$ rename -v s/\(a\)/b/ \(a\).* 

(a).1 renamed as (b).1
(a).2 renamed as (b).2
(a).3 renamed as (b).3

Hmm não é o que eu esperava. Depois de pesquisar um pouco no Google, descobri que \( \)é umoperador de agrupamento. O que faz sentido, já que não escapei do ( )comando.

Resolvi meu problema de renomeação usando o .caractere que corresponde a todos os tipos de valores:

rename -v s/.b./b/ \(b\).*

Esta solução não é muito legal. Então, como faço para combinar (e )no Bash/Linux/Unix Regex?

Responder1

Aqui está o que você precisa:

find -name "(*)*" -type f | rename 's/\(|\)//g'

Ele primeiro encontra arquivos no diretório atual que correspondem ao nome descrito e depois os renomeia removendo os colchetes. Você pode ver que os caracteres correspondentes (e) foram substituídos por nada.

informação relacionada