Use regex para alterar (reorganizar) vários nomes de arquivos no Bulk File Renamer

2

Eu tenho alguns milhares de arquivos MP3 aninhados em pastas que gostaria de renomear em massa.

Os arquivos atualmente têm a seguinte convenção de nomenclatura:

"tracknumber_artistname_-_songname_MP3COLLECTION.mp3"

Por exemplo:

"01_Michael_Jackson_-_Wanna_Be_Startin'_Something_MP3COLLECTION.mp3"

No entanto, eu gostaria de reorganizar esses arquivos movendo o nome do artista após o nome da música, removendo o texto no final e substituindo todos os sublinhados por espaços, resultando na convenção acima e exemplo resultante assim:

"tracknumber songname - artistname.mp3"
"01 Wanna Be Startin' Something - Michael Jackson.mp3"

Eu tenho um renomeador de arquivos em massa que dá opções para o Regex, mas não sei como fazer isso. Alguma sugestão? Eu também estou aberto a usar diferentes ferramentas ou até métodos, se a Renomeação de arquivos em massa não for a melhor opção.

Nota: eu originalmente postou isso no StackExchange , mas foi aconselhado a postar isso aqui, em vez de estar fora do tópico.

    
por LincM 19.01.2015 / 04:20

2 respostas

1

No Windows? Eu não sei "Bulk File Renamer". Eu usaria a ferramenta "Multi Rename" do Total Commander. Melhor ainda, eu provavelmente trabalharia com perl ou awk a partir de um terminal Cygwin para uma solução de script mais abrangente. Isso iria longe demais para aqui. Apenas a partir de uma perspectiva regex, isso funciona para mim no TC com seu nome de arquivo (mas somente se os arquivos não contiverem "-" ou "." Extras nos campos artista ou song title), provavelmente deve funcionar em qualquer renomeação em massa compatível com regex ferramenta sem muita dificuldade, porque eu não acho que eu usei qualquer coisa de fantasia RegEx avançada, como classes de caracteres posix (": digit:" e tal) ...

Se você estiver usando o TC, marque as caixas de seleção "[E]" e "RegEx" e desmarque as outras três, na Pesquisa & Substitua parte da ferramenta Multi-Rename. Eu testei essa coisa toda no TC, então, por favor, aprecie o tempo que eu levei para você :) Se você usar outra ferramenta e ela não funcionar, pesquise sua ajuda relacionada ao RegEx para "referências anteriores", pois algumas ferramentas tendem a usar padrões diferentes para Bacrefs RegEx. (É o $ 1 $ 2 $ 3 etc. no meu código abaixo que se refere a algo entre parênteses na pesquisa.)

OBSERVAÇÃO Se você quiser renomear em massa, por favor, pelo amor de Deus, faça um backup de toda a sua coleção primeiro. Nunca se sabe. Eu não sou responsável, blá blá.

PRIMEIRO: crie o separador em {tracknr} _ {artist} "_-_" em vez do "_" atual. Porque "_-_" parece ser um separador útil que não costuma aparecer acidentalmente em qualquer texto normal. Além disso, vamos apagar a parte "_ {MP3COLLECTION}" aqui.

search for:   (([0-9]+)_)(.*)_(.*)(\..*)
replace with: $2_-_$3$5

Observação: isso pressupõe que você esteja incluindo a extensão de arquivo no processo de renomeação e garante que você mantenha essa extensão, caso você também tenha arquivos .ogg ou o que for. Se a sua ferramenta não incluir a extensão no processo de renomeação, remova o último "(\ .. *)" da pesquisa e os últimos $ 5 da substituição.

Seu nome agora parece com: 1 _-_ Michael_Jackson _-_ Wanna_Be_Startin'_Something.mp3

SECOND: agora substitua a primeira ocorrência de "_._" por "" e a segunda por "-":

search for:   (.*?)_-_(.*?)_-_(.*)(\..*)
replace with: $1 $2 - $3$4

Nota: Novamente, se a sua ferramenta não incluir a extensão do arquivo no processo, remova o último "(\ .. *)" da pesquisa e os últimos $ 4 da substituição.

Seu nome agora parece: 1 Michael_Jackson - Wanna_Be_Startin'_Something.mp3

TERCEIRO E ÚLTIMO: Simplesmente substitua "_" por "".

Seu nome agora parece: 1 Michael Jackson - Wanna Be Startin 'Something.mp3

Boa sorte!

/ edit: bastante precisão necessária para garantir que todos esses sublinhados sejam exibidos corretamente neste post:)

/ edit 2: reflexão tardia. Você também pode querer preencher os números das faixas abaixo de 10 (ou seja, 0-9) com um 0, para que você obtenha 01, 02, ..., 09, 10, 11 etc. Isso torna a classificação muito mais fácil e aumenta enormemente as chances de coisas como telefones ou MP3 players para tocar suas faixas na ordem correta. Para isso:

Search for:   (^[0-9] )
Replace with: 0$1
    
por 19.01.2015 / 05:22
0

Meu primeiro instinto é não tentar escrever um programa ou script para fazer isso, mas usar um programa de renomeação de mp3 pronto para fazer isso por você. Existem diferentes disponíveis (de qualidade variável) para diferentes sistemas operacionais.

Ou se você estiver entusiasmado com a idéia de renomear, você pode usar as ferramentas do gnu (disponíveis em linux / unix / mac ou Cygwin) como sed ou awk , ou tr & cut & variáveis em um script bash ... você precisará de um modo padrão para separar os campos (música, artista, trilha) em seus nomes de arquivos, se você estiver usando um número variável de espaços entre eles, sem nenhum separador de campo definido isso seria complicado.

Aqui está uma linha awk preliminar muito rápida que separa a string de entrada (após _ ter sido traduzida em spaces) e as imprime em uma ordem diferente, você terá que descobrir "tracknumber" no início você mesmo:

$ jackstring="tracknumber_artistname-songname_MP3COLLECTION.mp3"

$ echo $jackstring 
tracknumber_artistname-songname_MP3COLLECTION.mp3

$ echo "$jackstring"|tr -s "_" " "|awk -F'[-.]' '{printf "%s-%s.%s\n", $2,$1,$3 }' 
songname MP3COLLECTION-tracknumber artistname.mp3
    
por 19.01.2015 / 06:31