Como mover números em nomes de arquivos, em uma operação de renomeação em lote?

13

Eu tenho tentado descobrir como renomear arquivos nas últimas horas.

Eu tenho 2000 arquivos que são assim:

file.1.pdb
file.2.pdb
file.3.pdb

Gostaria de renomear esses arquivos para algo como:

file.pdb.1
file.pdb.2
file.pdb.3
user812758
fonte
Você não quis dizer bash ?
avazula 29/03
4
@avazula Não, por favor leia este artigo: en.wikipedia.org/wiki/Batch_renaming
Ali Razmdideh
@PerlDuck yes;)
Ali Razmdideh
6
Possível duplicata de Como renomear arquivos facilmente usando a linha de comando?
Wjandrea 29/03
2
Ei, eleitores próximos - vocês realmente acham que precisamos apenas de uma pergunta na tag [renomear lote]? Existe alguma coisa na postagem vinculada que realmente ajude com a tarefa nesta pergunta, exceto a ideia de usar rename? Parece-me que, se uma pergunta de renomeação de lote tiver detalhes específicos, devemos apenas fornecer respostas específicas .
Zanna 31/03

Respostas:

15

Se você renameinstalou, você pode usar

rename -n 's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # just watch what WOULD happen
rename    's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # actually rename the files

O comando renamepode ser instalado via

sudo apt install rename
PerlDuck
fonte
11

Através mmv(renomear vários arquivos por padrões curinga) é fácil:

mmv '*.*.*' '#1.#3.#2' *.pdb

ou zmvde zshcasca; é um módulo que permite renomear; veja Exemplos do ZMV :

zmv -w '*.*.*' '$1.$3.$2' *.pdb
αғsнιη
fonte
3
Ambos mmve zmvparecem bastante exóticos para mim. Você se importa em elaborar um pouco o que são e o que fazem?
PerlDuck
2
Eu adicionei um link para sua página de manual e exemplos.
29518
mmvé bem legal. Parece mais adequado para esse tipo de renomeação do que rename, embora seja menos flexível em termos de correspondência de nomes.
JAB
11

Usando Perl rename:

rename -n 's/(\.\d+)(\.pdb)/$2$1/' *.pdb

Explicação rápida:

  • *.pdbCorresponda todos os arquivos que terminam com .pdb. (Feito pela concha)
  • (\.\d+)Combine um ponto literal e um ou mais dígitos decimais. Os parênteses criam um grupo de correspondência.
  • $2$1 Inverta o primeiro e o segundo grupos de correspondência.
  • -nNenhuma ação (simular). Se a saída parecer boa, execute o comando novamente sem esse sinalizador.
wjandrea
fonte
1
RI MUITO. O mesmo pensamento. Você foi 48 segundos mais rápido.
PerlDuck
1
@PerlDuck Lol, sim, o mesmo pensamento. As respostas também se complementam muito bem: você cobre a instalação, eu cubro a sintaxe.
wjandrea
7

Você pode usar este script:

for i in `seq 1 2000`; do
mv file.$i.pdb file.pdb.$i
done

Ou este comando amigável para copiar e colar:

for i in `seq 1 2000`; do mv file.$i.pdb file.pdb.$i; done

Para usar os comandos acima, coloque todos os arquivos de 2000 em uma pasta e, em seguida, abra o terminal nesse diretório e execute o comando acima.

Ali Razmdideh
fonte
5

Recentemente, o nautilus, o gerenciador de arquivos padrão, recebeu um diálogo de renomeação em lote. Ainda não é poderoso o suficiente para fazer o que você deseja. Mas, felizmente, existe o thunar, um gerenciador de arquivos alternativo que pode ser instalado. Com o diálogo renomear thunars, você pode fazer o que quiser usando a GUI.

Primeiro instale o thunar:

sudo apt install thunar

Inicie o thunar, navegue até o diretório que possui seus arquivos. Em seguida, selecione todos eles. Pressione F2.

Na caixa de diálogo exibida, novamente, selecione todos os arquivos. Mude o modo para "Pesquisar e substituir" e "Nome e sufixo". Marque "Expressão regular". Agora use o seguinte como pesquisar e substituir padrões:

file\.(.+)\.pdb

e

file.pdb.$1

Por fim, clique no botão Renomear.

A vantagem dessa maneira é que você obtém uma visualização visual do que acontecerá antes de realmente renomear.

caixa de diálogo thunar renomear

Sebastian Stark
fonte
1
Você pode fazer com que a maioria dos programas imprima mensagens em inglês prefixando o comando com LC_MESSAGES=POSIX, por exemplo LC_MESSAGES=POSIX free. Funciona da mesma forma para aplicativos gráficos, embora no caso de aplicativos persistentes como o Nautilus em sua configuração padrão, você precise finalizar a instância anterior nautilus -qprimeiro.
David Foerster
@DavidFoerster obrigado por mencionar, a imagem foi substituída.
Sebastian Stark
3

Você pode usar renamefrom util-linuxpara isso (o comando é chamado rename.ulno ubuntu):

rename.ul .pdb '' *
rename.ul "file." "file.pdb." *

Isso primeiro remove a .pdbextensão do final e depois a insere novamente no meio.

user812791
fonte
1
Muito legal. Eu não estava ciente rename.ul. A sintaxe é um pouco inesperada, mas funciona da maneira que você anuncia. Além disso: ele também possui um -ninterruptor (não toque, apenas diga).
PerlDuck #