Como posso usar o comando renomear para corrigir esses nomes de arquivo?

1

Estou tentando alterar arquivos semelhantes a

01 Track name.mp3

em

01 - Track name.mp3

Até agora, minhas tentativas fúteis foram

rename '0. ' '$&- ' *.mp3
rename 's/0. /$&- /' *.mp3
rename '/0. /' '/$&- /' *.mp3
rename 's/0.\ /$&-\ /' *.mp3
rename 's/0.\ /$1-\ /' *.mp3
    
por Yousef Amar 21.06.2016 / 14:43

5 respostas

2

Assumindo o comando perl rename :

Você está muito perto do último comando. rename 's/(0.) /$1 - /' *.mp3 funcionaria. Não há necessidade de escapar do espaço, eles não têm significado especial em expressões regulares (eles fazem em nomes de arquivos, mas isso não importa aqui), e você precisa de parênteses em torno da parte que deseja reutilizar.

    
por 21.06.2016 / 15:01
2

Ele tem que usar o comando rename ?

$ ls
01 Track name.mp3  02 Track name.mp3  03 Track name.mp3

$ for a in *.mp3
> do
> mv -i "$a" "${a%% *} - ${a#* }"
> done

$ ls
01 - Track name.mp3  02 - Track name.mp3  03 - Track name.mp3
    
por 21.06.2016 / 14:57
1
$ rename 's/^(\d\d)\s*/$1 - /' *.mp3

Isso renomeará todos os arquivos MP3 que tiverem um dígito duplo no início de seus nomes de arquivos, inserindo espaço-traço espacial após os dígitos. Então, 01 Track name.mp3 se tornará 01 - Track name.mp3

A julgar pelas suas próprias tentativas, todos os nomes de arquivos começam com o dígito zero, e você parece querer inserir um traço diretamente após os dígitos seguidos por um espaço:

$ rename 's/^(0\d)\s*/$1- /' *.mp3

Isso transforma 01 Track name.mp3 em 01- Track name.mp3 .

    
por 21.06.2016 / 15:01
1

Esse é o Perl rename , suponho. Talvez algo assim funcionasse:

rename 's/^(\d+) ([^-])/$1 - $2/' [0-9]*.mp3

Combine qualquer coisa que comece com números, depois um espaço e depois algo diferente de um traço. Substitua pelos números, um traço e o próximo caractere. (O restante do nome não é tocado.) Verificando explicitamente o traço aqui para que os aplicativos repetidos não acabem com arquivos como 01 - - Track name.mp3 .

Na verdade, seu segundo exemplo parece funcionar, embora, é claro, para nomes em que o primeiro dígito é um zero. Poderíamos mudar isso para qualquer dígito e substituir minha segunda expressão capturada por uma antecipação negativa para continuar a adicionar mais de um traço.

rename 's/^\d+ (?!-)/$&- /' *.mp3

( (?!pattern) corresponderá a uma posição que não é seguida pela pattern , mas a correspondência é de largura zero, por isso não causa substituição.)

    
por 21.06.2016 / 14:54
0

Existem dois (três) comandos para apagar: um que faz parte do pacote util-linux instalado todos os sistemas Linux não incorporados e um (duas variantes, na verdade) com base no Perl. Veja O que há com todas as renomeações: prename, rename, file-rename?

O comando util-linux é muito básico, mas você está na rara situação em que pode fazer o que quiser. Substitua o primeiro espaço por space-dash-space:

rename ' ' ' - ' [0-9][0-9]\ [^-]*
    
por 22.06.2016 / 09:23