É assim que eu faço normalmente (manualmente no shell):
rename left- left-0 left-?.png # for 0-9
rename left- left-0 left-??.png # for 00-99
rename left- left-0 left-???.png # for 000-999
# result left-0000.png - left-9999.png
Isso é fácil de fazer em uma sessão de shell interativa ... basta repetir o último comando com um% adicional?
adicionado.
No entanto, com um grande número de arquivos, você acabará tendo uma lista muito longa de argumentos. E obviamente não é a escolha mais eficiente, pois acaba renomeando o mesmo arquivo várias vezes (left-1.png - > left-01.png - > left-001.png - > ...). / p>
Além disso, existem dois tipos de rename
, um com expressões regulares perl e outro sem. Dependendo da distro, você acaba com rename.ul
ou perl-rename
ou outros nomes para eles. Basicamente, ele renderiza qualquer script usando o comando rename
não portável, já que você nunca sabe o que esperar.
Estou usando a renomeação util-linux e sua pergunta é, na verdade, um dos exemplos deles, da página man:
EXAMPLES
Given the files foo1, ..., foo9, foo10, ..., foo278, the commands
rename foo foo00 foo?
rename foo foo0 foo??
will turn them into foo001, ..., foo009, foo010, ..., foo278.
Qual é o método mais eficiente (cada arquivo é renomeado apenas uma vez), mas você tem que descobrir a distribuição correta de 000
vs ???
ou você vai acabar com um resultado errado.
Para mim, o método ineficiente é o mais prático, em um shell interativo, ao lidar com um pequeno conjunto razoável de arquivos.
A vantagem de rename
sobre a criação de scripts é que ela não precisa gerar um processo mv
para cada arquivo ou, como no seu caso, um sub-script apenas para descobrir um nome de arquivo. Não está claro o que tem mais sobrecarga, o processo de desova ou renomeação repetida, e estou com preguiça de compará-lo.
Na verdade, a resposta que você vinculou já contém a solução "ótima" no final ... usando perl-rename:
rename 's/\d+/sprintf("%04d",$&)/e' *.png
Bem, pode-se argumentar sobre a expressão regular, mas o ponto é, é possível fazer tudo de uma só vez, sem mv
desnecessário, ou desova de processos. Se você ainda precisar melhorar isso, escreva uma ferramenta que leia o conteúdo do diretório diretamente, em vez de usar o shell globbing (que ordena, que é lento) e execute a renomeação conforme necessário.
Talvez essa seja a resposta a que você ligou e talvez seja por isso que você está ganhando o negativo. ;)