Usando perl-rename (que é uma das duas ferramentas mais comumente chamada rename
; a outra usa uma sintaxe muito diferente e não pode fazer isso em uma etapa):
rename -f 's/00 - ([^.]*).*/$1.ogg/' *.ogg
A opção -f
ou --force
faz renomear os arquivos existentes.
A segunda parte é uma substituição de expressão regular em estilo perl. A sintaxe básica é s/replacethis/withthis/
O padrão para corresponder - 00 - ([^.]*).*
- corresponderá a todos os arquivos * .ogg com nomes como os da sua pergunta. 00 -
- obviamente, isso apenas corresponde ao padrão no início de cada um dos nomes de arquivos. ([^.]*)
é a carne da expressão regular. [^.]
corresponderá a qualquer caractere único que não seja .
, enquanto *
significa 'qualquer número da coisa anterior', então [^.]*
significa 'qualquer número de caracteres que não são .
' . Os parênteses marcam um grupo de captura (mais sobre isso em um segundo). Em expressões regulares, .
significa 'qualquer caractere' (se você quiser um ponto literal neste lado da substituição você tem que escapar, como em: \.
), então o% final .*
significa 'qualquer número de qualquer personagem '.
Na segunda parte do comando de substituição, $1
significa 'o primeiro grupo de captura' - isto é, aquele que está contido dentro do primeiro par de parênteses (veja? Disse a você que eu voltaria a ele) . O .ogg
significa um literal '.ogg' - neste lado da substituição, você não precisa escapar do ponto.
Então, aproximadamente traduzido para o inglês, 's/00 - ([^.]*).*/$1.ogg/'
está dizendo rename
para "tirar" 00 - ", seguido por (qualquer número de caracteres que não sejam um ponto), então qualquer número de caracteres; e substitua-o pelos caracteres contidos nos colchetes e ".ogg." '.
Em alguns sistemas, renomear perl é chamado prename
(quando rename
é obtido pelo outro programa mencionado anteriormente). Em alguns sistemas, não está disponível: (
Para recursividade, você pode fazer o seguinte:
shopt -s globstar ## assuming your shell is bash
rename 's/00 - ([^.]*).*/$1.ogg/' **/*.ogg
Ou:
find . -name '*.ogg' -exec rename 's/00 - ([^.]*).*/$1.ogg/' {} +