Eu tenho brincado com a implementação perl da ferramenta de renomeação no cygwin e finalmente consegui fazê-la funcionar através da instalação do cpan.
Já faz muito tempo que não brinquei com essas coisas, então estou um pouco enferrujado com minhas coisas de regexp.
basicamente estou apenas tentando renomear um monte de pastas no formato
[2022-10-10] This is a Test - This is a Test (some stuff) [393933939339]
ou
[2022] This is a Test - This is a Test (some stuff) [393933939339]
e mova o material do início delimitado por []
até o final para que pareça
This is a Test - This is a Test (some stuff) [393933939339] [2022-10-10]
ou
This is a Test - This is a Test (some stuff) [393933939339] [2022]
Eu descobri como fazer isso usando parâmetros de posição, mas estou lutando para fazer isso usando correspondência de padrões para[]
rename -n 's/^(.{12})(.*)$/$2 $1/'
fará o trabalho para as pastas com a data completa e obviamente, mas não para as pastas com apenas um ano. Idealmente, gostaria de uma única expressão para processar todos eles.
Acho que pode ser complicado pelo fato de [] serem tratados como operadores, portanto, pode ser necessário escapar de alguma forma.
Qualquer ajuda será apreciada.
Exatamente assim. A maneira padrão de escapar de um caractere em um RE é precedê-lo com uma barra invertida
\
. Então,Foi recomendado que o
s
modificador final na substituição do padrão seja incluído, pois isso permite que o padrão corresponda às novas linhas como caracteres (afinal, eles são válidos em nomes de arquivos). Além disso, restrinja o conjunto de arquivos a serem considerados àqueles que poderiam ser transformados (isso desconsidera nomes de arquivos começando com-v
, etc. que seriam passados pelo shell e processadosrename
como opções de argumento válidas) usando'['*
como padrão de nome de arquivo; você também poderia usar./*
.O que eu faria:
A expressão regular corresponde ao seguinte:
^
(
\[
.*?
\]
)
(
.*
)