Tento descobrir como renomear arquivos em lote usando Fish para que nomes de arquivos como image1.png
e image10.png
sejam substituídos por image001.png
e image010.png
, ou seja, preencher números com zeros à esquerda.
Aqui está o que tenho atualmente, depois de ler https://fishshell.com/docs/current/cmds/string.html#string-manipulate-strings :
for file in *; mv -- $file (string pad -c 0 -w 3 (string match -r '\d' $file)); end
Atualmente ele substitui apenas nomes de arquivos por 001
e 010
.
Para dividir nomes de arquivos como foo123.abc
em foo
, 123
e .abc
grupos, posso usar o seguinte regex: ([^\d]*)(\d+)(\..+)
.
Mas como integrar corretamente essa regex no exemplo que postei acima? Como fazer o exemplo acima funcionar conforme descrito?
Isso fará isso:
No fish shell, você pode obter os subgrupos de uma correspondência de regex usando grupos de captura nomeados . O nome de cada grupo torna-se uma variável shell, cujo valor é o subgrupo capturado.
Aqui, o regex tem três grupos de captura
prefix
,num
esuffix
, e estes se tornam variáveis comuns do shell.Documentação sobre este recurso.