Como renomear em lote arquivos trocando substrings nos nomes de arquivos?

1

Eu tenho arquivos como ABC_asd_f.txt , DEF_qwe_r.txt , ...

Como posso trocar as maiúsculas antes do primeiro sublinhado com as minúsculas depois? Então, ABC_asd_f.txt se torna asd_f_ABC.txt , DEF_qwe_r.txt se torna qwe_r_DEF.txt , ...

    
por Lee 10.06.2016 / 01:57

1 resposta

4

Use renomear perl. Em primeiro lugar, use o sinalizador -n para uma execução a seco.

rename -n 's/^(...)_(..._.)/$2_$1/' *

Então, se você estiver feliz, execute-o de verdade.

rename 's/^(...)_(..._.)/$2_$1/' *

Explicação

Isso usa grupos de captura.

  • rename 's/foo/bar/' * : substitua foo por bar para todos os arquivos * .
  • ^(...)_(..._.) : desde o começo da linha ^ , capture os três primeiros caracteres (...) , pule _ , capture os próximos cinco caracteres, onde o quarto é sublinhado (..._.) .
  • $2_$1 : substitua a string acima com os grupos de captura invertidos (isto é, o segundo, um sublinhado e depois o primeiro).

Renomear versão

Existem dois rename s no Linux-land. Você pode dizer se é renomear perl com o seguinte

$ rename --version
perl-rename 1.9

O outro vai dar um resultado diferente.

$ rename --version
rename from util-linux 2.28
    
por 10.06.2016 / 02:10