
Estou tentando renomear vários arquivos com 'renomear' e tenho meu regex bem configurado:
rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1).$3|' *
Mas eu realmente gostaria que cada arquivo fosse colocado em um diretório com início comum, então tentei:
rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3|' *
Mas isso reclama que nenhum dos diretórios existe (como não existe). Estou faltando um sinalizador útil para renomear ou é uma ferramenta melhor para isso?
Responder1
Se você estiver usando um arquivo baseado em Perl rename
, nada o impedirá de chamar mkdir()
para criar os diretórios ausentes:
rename --verbose '
s|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3| &&
mkdir("$2 ($1)")' *
Esta é a mesma expressão Perl que você usa, com uma chamada adicionada mkdir()
no final para criar o diretório se a expressão corresponder.
Se a substituição original está correta ou não, ou se faz sentido, não sei (não sei que tipos de nomes de arquivos você possui). A questão é que, como a expressão é uma expressão Perl genérica, você está livre para usar qualquer código Perl, desde que $_
(a variável padrão) esteja definida como o nome do arquivo resultante no final.