%20com%20um%20regex%20Unix%2FLinux.png)
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 rename
onde 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.