Se você tiver a versão em perl de rename
(às vezes chamada de prename
), poderá usar isso
rename -n 's/^0*(\d+).*(\.m4a)\z/$1$2/s' [0-9]*.m4a
Quando você estiver feliz, fará o que quiser, removerá o sinal -n
.
Isso usa uma correspondência de expressão regular:
-
^
- requer início de assunto -
0*
- corresponde a zero ou mais "0" -
(\d+)
- corresponde e lembra um ou mais dígitos decimais -
.*
- corresponde tudo até ... -
(\.m4a)
- corresponde e lembra literal ".m4a" -
\z
- requer end-of-subject¹ -
s
flag - certifique-se de que.
corresponda a qualquer byte (incluindo nova linha, também válido em nomes de arquivos)
e, em seguida, usa $1
e $2
para referenciar o valor das expressões entre colchetes.
¹ Não é estritamente necessário aqui, pois os nomes de arquivos fornecidos pelo shell como argumento, todos terminam em .m4a
e o% anterior.*
é ganancioso. $
também funcionaria aqui, mas em rename
que trabalha com nomes de arquivos (que podem ser qualquer sequência de bytes não-0 incluindo nova linha), \z
é preferível, pois $
corresponde ao final do assunto como \z
mas também antes um eventual último caractere de nova linha.