Altera todos os nomes de arquivos no diretório para numerais

1

Eu tenho arquivos em um diretório onde nomes de arquivos são

01 ABC DEF.m4a
02 DEF ABC.m4a
etc...

Eu quero convertê-los para

1.m4a
2.m4a
etc...

Como posso fazer isso usando a linha de comando?

    
por Perseus14 04.10.2018 / 08:53

2 respostas

1

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.

    
por 04.10.2018 / 09:00
1

Como seria

for FN in *.m4a; do mv -i "$FN" "${FN%% *}.m4a"; done

você?

    
por 04.10.2018 / 13:10

Tags