Preciso renomear o seguinte:
file_001_loremipsum.png
file_002_dolor.png
file_003_sit.png
file_004_amet.png
file_105_randomness.png
para dentro
upl_loremipsum.png
upl_dolor.png
upl_sit.png
upl_amet.png
upl_randomness.png
Como faço isso acontecer com apenas uma linha simples de comando do terminal?
rename
regex
batch-rename
Unamata Sanatarai
fonte
fonte
Respostas:
A solução para o exemplo acima, usando renomear :
Uso:
De
man rename
:renomear PODE tomar regex como os argumentos.
O que estamos vendo é o conteúdo entre aspas simples
'
. Você pode colocar regex separado por/
.Fórmula:
s/(1)/(2)/
onde(1)
= padrão de pesquisa e(2)
= substituir padrão.Portanto, familiarize-se com o regex e aproveite a renomeação de arquivos em lote com base em padrões!
fonte
rename
é facilmente instaladobrew install rename
.--no-act
bandeira está em seu--nono
lugar. Essa resposta também pode ser um pouco mais explícita:[files]
refere-se a um padrão inicial que corresponde aos arquivos no diretório atual que se deseja renomear (por exemplo,*
corresponde a tudo, mas apenas no diretório atual).rename
, que possui formatorename from to file
e não suporta expressões regulares. Na verdade, minha distribuição Linux (Cent OS 7) tem exatamente essa versão.se os arquivos estiverem nos diretórios de severais, use renomear após uma descoberta como:
o -n depois de renomear é testar, remova-o para continuar! -)
assim, você associa encontrar e renomear poder.
Pessoalmente, usei-o para renomear o cabeçalho de fontes .h para .hpp
fonte
-iname
,-type
e-exec
bandeiras em manpages.ubuntu.com/manpages/bionic/man1/find.1.html#expression . (find --help
não é particularmente útil para este comando.) TL; DR:-iname
corresponde a um padrão sem distinção entre maiúsculas e minúsculas;-type f
corresponde a "arquivos regulares"; e-exec
executa uma expressão até encontrar um;
caractere (ponto e vírgula).Isso pode ser feito com pouca mágica da expansão dos parâmetros do bash!
file_[0-9]*_*;
- O primeiro padrão é usado para percorrer todos os arquivos que começam com 'file_anynumber_'${f#file_[0-9]*_}
- O segundo padrãofile_[0-9]*_
é usado na expansão de parâmetros que informa ao bash para remover 'file_anynumber_' do início da string.Para mais informações sobre
Parameter expansion
:fonte
[0-9]*
, corresponderá a um dígito seguido por qualquer sequência. Provavelmente existe uma maneira melhor de combinar apenas números, mas não consigo pensar em nada sucinto.