Rodrigo Ribeiro ribeirrs@gmail.com [shell-script]
2016-11-28 23:17:31 UTC
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?
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?