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¹ -
sflag - 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.