Eu tenho uma tonelada de arquivos, todo o material nomeado como 1.jpg
, 2.jpg
, 3.jpg
e assim por diante até 1439.jpg
, no entanto, eu tenho um problema com um dos meus projetos e alfabetização. Ele geralmente vai na ordem 1.jpg
, 10.jpg
, 11.jpg
e assim por diante.
O que eu preciso é de uma maneira de nomear os arquivos para que eles estejam no formato, até 00001.jpg
o final 01439.jpg
.
Como eu seria capaz de fazer isso de maneira rápida e eficiente?
scripts
batch-rename
Kaz Wolfe
fonte
fonte
ls -v
unix.stackexchange.com/questions/33909/…pyrenamer
.Respostas:
O Ubuntu vem com um script chamado
rename
. É apenas um pequeno script Perl que apresenta vários recursos poderosos de renomeação em massa, mas o melhor (nesse caso) é a capacidade de executar o Perl durante a substituição. O resultado é uma solução verdadeiramente compacta:Isso é semelhante às
printf
respostas do outro estilo aqui, mas é tudo tratado por nós. O código acima é para um número de 5 dígitos (incluindo um número variável de zeros à esquerda).Ele pesquisará e substituirá a primeira sequência numérica encontrada por uma versão preenchida com zero e deixará o restante do nome do arquivo em paz. Isso significa que você não precisa se preocupar muito em carregar qualquer extensão ou prefixo.
Nota: isso não é totalmente portátil. Muitas distribuições usam
rename.ul
doutil-linux
pacote como seurename
binário padrão . Esta é uma alternativa significativamente atrofiada (vejaman rename.ul
) que não entenderá o que foi dito acima. Se você quiser isso em uma plataforma que não esteja usando a renomeação do Perl, descubra como instalá-lo primeiro.E aqui está um equipamento de teste:
E um exemplo de prefixo (não estamos fazendo nada de diferente):
fonte
sprintf
no Perl se comporta de maneira semelhantesprintf
em outros idiomas.Editar
Explicação:
if [[ $f =~ [0-9]+\. ]]
garante que apenas os arquivos cujos nomes sejam números (seguidos de um ponto) sejam renomeados.printf "%.5d" NUMBER
adiciona os zeros iniciais"${f%.*}"
corta a extensão (.jpg) e deixa apenas o número.jpg
após o segundo backtick, adiciona a extensão do arquivo novamente.Observe que isso funcionará apenas em nomes de arquivos que são números. Os zeros à esquerda do preenchimento esquerdo para arquivos não numerados exigiriam um formato diferente.
Se você quiser experimentar, tente este comando:
Editar 2
Tornou o comando mais seguro, certificando-se de que apenas nomes de arquivos números sejam renomeados. Observe que todos os arquivos preexistentes nomeados como 00001.jpg serão substituídos.
fonte
Abaixo de um script python.
O script adiciona zeros à esquerda até o número definido de dígitos. Se o nome for maior que isso, o arquivo (nome) será intocado.
A combinação de extensões diferentes em uma ação de renomeação pode adicionar alguma conveniência. Para adicionar extensões, basta adicioná-las à tupla, por exemplo
extensions = (".jpg", ".jpeg", ".tiff")
.Copie o texto em um arquivo vazio, salve-o como
rename.py
, digite o caminho correto para o diretório de arquivos (sourcedir
), o número de dígitos que você deseja que os novos nomes tenham (number_ofdigits
) e a (s) extensão (ões) do arquivo para renomear (extensions
)Execute-o pelo comando:
O script:
editar:
Abaixo uma versão ligeiramente melhorada. Ele determina automaticamente o nome mais longo no diretório e adiciona zeros à esquerda até o tamanho do nome mais longo.
exemplo:
torna-se:
Não há necessidade de definir o número de dígitos.
fonte
Há um utilitário de renomeação implementado no Perl que facilita muito isso:
O primeiro argumento é uma expressão Perl avaliada para cada nome de arquivo.
fonte
Existe uma GUI que fará isso chamada pyRenamer, que pode ser encontrada nos repositórios. Instale, inicie, selecione seu diretório e apenas defina o 'Padrão de nome de arquivo renomeado' como '{num5}' na guia 'Padrões' e clique no botão 'Renomear'. Você também pode visualizar o que acontecerá antes da renomeação.
fonte
shell-scripting
seção, o que significa que estou procurando uma resposta na linha de comando. Além disso, você pode fornecer mais detalhes sobre o programa? Por exemplo, qual é o formato do padrão{num5}
?Isso é bruto, já que não renomeia de forma inteligente, será necessário pensar em um truque para isso. Mas isso deve ajudá-lo a classificar as coisas.
Atualização: Bem, você tem uma resposta mais completa.
fonte