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

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


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

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

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.

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.


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


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.


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 #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.