bash, arquivos, renomear arquivos, trocar posições
Como renomear
sluno-20201027-call-metroua-status.mp4
sluno-20201103-call-deriva.mp4
sluno-20201103-call-metroua-status.mp4
sluno-20201105-call-makrocz.mp4
sluno-20201105-call-metroua-testcall.mp4
sluno-20201105-call-sluno-ggtabak.mp4
sluno-20201110-call-makrocz.mp4
sluno-20201110-call-metroua-status.mp4
sluno-20201110-call-sluno-utccz.mp4
para
sluno-call-metroua-status-20201027.mp4
sluno-call-deriva-20201103.mp4
sluno-call-metroua-status-20201103.mp4
sluno-call-makrocz-20201105.mp4
...
Simplesmente mova a data / string na posição 7-14
para o final do nome do arquivo.
Obrigado.
Respostas
mmv funciona bem para renomear arquivos descomplicados .
mmv '*-*-*-*.mp4' '#1-#3-#4-#2.mp4'
Também pode ser útil ter mais alguns pontos de referência para certificar-se de não alterar o nome em outra coisa, especialmente onde pode haver outros arquivos no mesmo diretório.
mmv 'sluno-[0-9]*-call-[a-z]*.mp4' 'sluno-call-#3#4-#1#2.mp4'
^ ^ ^ ^
1 2 3 4
sluno-20201027-call-metroua-status.mp4
^------- ^-------------
1 2 3 4
Se eu fosse fazer isso com o mínimo, mv
e bash
eu iria com um para-loop e bash
builtin BRE correspondente.
for i in *.mp4; do \
[[ $i =~ ^sluno-(.*)-call-(.*).mp4 ]] && \ mv -- "$i" "sluno-call-${BASH_REMATCH[2]}-${BASH_REMATCH[1]}.mp4"; \
done
Use rename
:
rename -n 's/^(.*?)-(.*?)-(.*?)(\.mp4)$/$1-$3-$2$4/' *.mp4
Remova o -n
se estiver satisfeito com a saída.
Para obter uma explicação, visite este .
Outra opção:
$ qmv {pattern}
irá colocar 2 colunas de nomes de arquivos em seu editor de escolha.
Modifique a coluna certa para ter os nomes de arquivo que você deseja.
A coluna da esquerda é o nome original. A coluna inicial do grupo certo não pode ser alterada, então a quebra automática pode atrapalhar.
Nas mãos de um especialista em cada editor, isso pode ser muito rápido, especialmente para colunas vim e modos visuais.
Em geral, eu uso renomear, mas para necessidades complexas, ver os nomes exatos no editor é bom.