Estou procurando uma maneira elegante de CLI para nomes de arquivo de preenchimento zero que são sequências alfanuméricas numeradas de comprimento arbitrário e que possuem traços no lugar de espaços.
Por exemplo, gostaria da seguinte lista de arquivos:
1-file-name-of-one-length.mp3
2-shorter-file-name.mp3
3-really-really-really-long-file-name.mp3
> ..
10-another-file-name.mp3
Tornar-se:
01-file-name-of-one-length.mp3
02-shorter-file-name.mp3
03-really-really-really-long-file-name.mp3
> ..
10-another-file-name.mp3
Passei um dia aprendendo sobre abordagens de awk, bash e renomeação para preenchimento com zeros, mas as perguntas anteriores aqui e os tutoriais que encontrei parecem assumir um esquema de nomeação de arquivo puramente numérico ou de comprimento padronizado. Nesses casos, os campos entre os delimitadores '-' podem ser divididos e remontados de maneira previsível com, por exemplo, awk. Minhas strings são de comprimento desconhecido, então contém um número desconhecido de campos entre os caracteres '-'.
Estou prevendo que a resposta será um 'loop for'. A lógica do que eu quero que o loop faça é algo como: Leia o nome do arquivo até o primeiro caractere '-'. Determine se o número que precede o primeiro '-' é um número de um ou dois dígitos. Se for um número de um dígito, insira um caractere '0' na frente dele.
EDITAR PARA RESPOSTA
Renaud apontou a sintaxe correta para um loop for simples (minha própria tentativa ao longo dessas linhas também resultou no preenchimento de números de dois dígitos, mas o código de Renaud funcionou)
para f em [0-9]-*.mp3; faça mv "$f" "0$f"; feito
Para preencher com um 0 apenas:
Caso não haja arquivos correspondentes ao
[0-9]-*.mp3
padrão, provavelmente é melhor também usar anullglob
opção (em um subshell apenas para restaurar automaticamente onullglob
status posteriormente):Se você quiser o número inicial em
n
dígitos em vez de apenas 2, diga 3:Por fim, se você não souber o valor de
n
, queira calculá-lo automaticamente e supondo que seja o número máximo de dígitos à esquerda nestes nomes de arquivo: