Como renomear múltiplos arquivos inserindo números

1

Eu tenho uma lista de arquivos como o seguinte:

pairs10_10.mp3
pairs10_11.mp3
pairs10_12.mp3
pairs10_13.mp3
pairs10_14.mp3
pairs10_15.mp3
pairs10_16.mp3
pairs10_17.mp3
pairs10_18.mp3
pairs10_19.mp3
pairs10_1.mp3
pairs10_2.mp3
pairs10_3.mp3
pairs10_4.mp3
pairs10_5.mp3
pairs10_6.mp3
pairs10_7.mp3
pairs10_8.mp3
pairs10_9.mp3
pairs1_10.mp3

Gostaria de obter algo como o seguinte, para que, quando forem classificados mais tarde, estejam na ordem correta:

pairs10_10.mp3
pairs10_11.mp3
pairs10_12.mp3
pairs10_13.mp3
pairs10_14.mp3
pairs10_15.mp3
pairs10_16.mp3
pairs10_17.mp3
pairs10_18.mp3
pairs10_19.mp3
pairs10_01.mp3
pairs10_02.mp3
pairs10_03.mp3
pairs10_04.mp3
pairs10_05.mp3
pairs10_06.mp3
pairs10_07.mp3
pairs10_08.mp3
pairs10_09.mp3
pairs01_10.mp3

Acabei de aprender sobre o comando rename , mas não sei como fazer esse tipo de renomeação.

    
por Curious 03.10.2014 / 05:02

3 respostas

2

Com o comando Perl rename :

rename 's/([0-9]+)_([0-9]+)/sprintf("%02d_%02d",$1,$2)/e' *.mp3

O modificador e para o % operador de substituição s significa que o substituição é uma expressão Perl em vez de uma string interpolada. O formato %02d da função sprintf formata um número inteiro com exatamente dois dígitos, adicionando zeros à esquerda conforme necessário .

Como alternativa, use zsh e sua opção numeric_glob_sort . No entanto, isso só se aplica quando o zsh está fazendo o globbing (como em play pairs*.mp3 ).

    
por 04.10.2014 / 03:19
1

POSIX:

for f in *;do x=${f#pairs};y=${f#*_};mv $f pairs_$(printf %02d_%02d ${x%_*} ${y%.mp3}).mp3;done

zsh:

autoload zmv;zmv 'pairs(*)_(*).mp3' 'pairs${(l:2::0:)1}_${(l:2::0:)2}.mp3'

    
por 08.10.2014 / 10:27
0

Acabei usando um processo de várias etapas com o comando rename. Provavelmente poderia ser simplificado:

rename 's/(pairs)([0-9])_/$1Z$2_/' *.mp3
rename 's/(_)([0-9])\./$1Z$2\./' *.mp3
rename 's/Z/0/' *.mp3
rename 's/Z/0/' *.mp3

($ 1 e $ 2 referem-se aos parênteses na primeira parte)

("Z" é apenas um espaço reservado porque "0" é misturado com "$ 1")

ideia do link

    
por 03.10.2014 / 05:37

Tags