shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] remoção de pacotes antigos


From: Julio C. Neves
Subject: Re: [shell-script] remoção de pacotes antigos
Date: Tue, 29 Nov 2016 09:53:18 -0200

1 -
$ echo "/repos/rpm/qa/centos6/x86_64/nome_pacoteA-1.2.1-20.x86_64.rpm
/repos/rpm/qa/centos6/x86_64/nome_pacoteB-1.2.1-20.x86_64.rpm
/repos/rpm/qa/centos6/x86_64/nome_pacoteC-1.2.1-20.x86_64.rpm
/repos/rpm/qa/centos6/x86_64/nome_pacoteD-xxx-base-1.0.1-45-1.2.1-20.x86_64.rpm" | grep -oE -- '-[0-9.-]+' 
-1.2.1-20.
-1.2.1-20.
-1.2.1-20.
-1.0.1-45-1.2.1-20.

2 -
$ echo "/repos/rpm/qa/centos6/x86_64/nome_pacoteA-1.2.1-20.x86_64.rpm
/repos/rpm/qa/centos6/x86_64/nome_pacoteB-1.2.1-20.x86_64.rpm
/repos/rpm/qa/centos6/x86_64/nome_pacoteC-1.2.1-20.x86_64.rpm
/repos/rpm/qa/centos6/x86_64/nome_pacoteD-xxx-base-1.0.1-45-1.2.1-20.x86_64.rpm" | grep -oE -- '-[0-9.-]+.*' 
-1.2.1-20.x86_64.rpm
-1.2.1-20.x86_64.rpm
-1.2.1-20.x86_64.rpm
-1.0.1-45-1.2.1-20.x86_64.rpm
Uma dica interessante: o -- é uma convenção que diz às instruções que a partir daquele ponto não existe mais opções. A partir dali, tudo é dado, no caso, regexp.

Para testar, experimente fazer:
$ > -xx
$ rm -i -xx
rm: opção -- 'x' inválida
Tente 'rm ./-xx' para remover o arquivo “-xx”.
Try 'rm --help' for more information.
$ rm -i -- -xx
rm: remover arquivo comum vazio “-xx”? y
$


Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 05
-09/12
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.


Em 28 de novembro de 2016 21:17, Rodrigo Ribeiro address@hidden [shell-script] <address@hidden.br> escreveu:
 

Pessoal, boa noite!

Tenho uma automação que entrega os pacotes rpm de um repositório meu local para os meus hosts.
Fiz um script que pega todos os pacotes que meus hosts estão utilizando e faz uma lista. Nessa lista está o nome dos pacotes e o path deles como no exemplo abaixo:

/repos/rpm/qa/centos6/x86_64/nome_pacoteA-1.2.1-20.x86_64.rpm
/repos/rpm/qa/centos6/x86_64/nome_pacoteB-1.2.1-20.x86_64.rpm
/repos/rpm/qa/centos6/x86_64/nome_pacoteC-1.2.1-20.x86_64.rpm
/repos/rpm/qa/centos6/x86_64/nome_pacoteD-xxx-base-1.0.1-45-1.2.1-20.x86_64.rpm


Preciso que meu script agora remova todas as versões anteriores ao que está instalado nos meus hosts (que obtive através da lista), para isso uma validação que ele precisa fazer é pegar o número da versão dessa lista e tudo que for um numero inferior (versões anteriores) remover do meu repositório, pois nesse meu cenário só preciso o que já está instalado ou versões posteriores, pois pode ser que futuramente elas sejam autorizadas em futuras entregas.

A primeira forma que tentei fazer isso foi o if com -lt, mas como nos nomes dos pacotes possuem campos alfanuméricos esse método não funcionou, pois ele reclama que há muitos argumentos.

Diante disso pensei em parsear a primeira lista para uma segunda, só com o nome dos pacotes e os números das versões, sem campos alfanuméricos e caracteres para grepar no meu diretório original e tomar a decisão de apagar ou não, Tentei isso usando cut, awk, sed mas em algumas ocasiões não deram certo pois nem sempre tem o mesmo padrão de nome, como no exemplo que passei ai, o pacoteD tem alguns campos a mais até chegar no número da versão.

Alguém tem uma luz de como eu poderia fazer nesse caso?




reply via email to

[Prev in Thread] Current Thread [Next in Thread]