O Ubuntu vem com um script chamado rename
. É apenas um pequeno script Perl que apresenta vários recursos poderosos de renomeação em massa, mas o melhor (neste caso) é a capacidade de executar Perl durante a substituição. O resultado é uma solução verdadeiramente compacta:
rename 's/\d+/sprintf("%05d", $&)/e' *.jpg
Isso é semelhante às outras respostas de printf
no estilo aqui, mas tudo é feito para nós. O código acima é para um número de 5 dígitos (incluindo um número variável de zeros à esquerda).
Ele procurará e substituirá a primeira string numérica que encontrar com uma versão com preenchimento zero e deixará o restante do nome do arquivo sozinho. Isso significa que você não precisa se preocupar muito em carregar qualquer extensão ou prefixo.
Nota: isso não é totalmente portátil. Muitas distribuições usam rename.ul
do pacote util-linux
como seu padrão rename
binário. Esta é uma alternativa significativamente atrofiada (veja man rename.ul
) que não entenderá o que foi dito acima. Se você quiser isso em uma plataforma que não está usando a renomeação do Perl, descubra como instalá-lo primeiro.
E aqui está um equipamento de teste:
$ touch {1..19}.jpg
$ ls
10.jpg 12.jpg 14.jpg 16.jpg 18.jpg 1.jpg 3.jpg 5.jpg 7.jpg 9.jpg
11.jpg 13.jpg 15.jpg 17.jpg 19.jpg 2.jpg 4.jpg 6.jpg 8.jpg
$ rename 's/\d+/sprintf("%05d", $&)/e' *.jpg
$ ls
00001.jpg 00005.jpg 00009.jpg 00013.jpg 00017.jpg
00002.jpg 00006.jpg 00010.jpg 00014.jpg 00018.jpg
00003.jpg 00007.jpg 00011.jpg 00015.jpg 00019.jpg
00004.jpg 00008.jpg 00012.jpg 00016.jpg
E um exemplo de prefixos (não estamos fazendo nada diferente):
$ touch track_{9..11}.mp3 && ls
track_10.mp3 track_11.mp3 track_9.mp3
$ rename 's/\d+/sprintf("%02d", $&)/e' *.mp3 && ls
track_09.mp3 track_10.mp3 track_11.mp3