Era uma vez um empacotador rpm, que estava com esse problema.
Bom, a solução que eu adotei foi pegar os campos de trás pra frente com
o sed, já que o final do arquivo é sempre consistente:
$ cat destrinchanome.sh
#!/bin/bash
while read pacote; do
novopacote=`echo "$pacote" | sed
's/\(.*\)-\(.*\)-\(.*\)\.\(.*\)\.rpm/[EMAIL PROTECTED]@[EMAIL PROTECTED]/'`
OLDIFS="$IFS"
IFS="@"
set - $novopacote
if [ "$#" -ne "4" ]; then
echo $@
echo "Ups, pacote $pacote nao destrinchado"
continue
fi
nome=$1;versao=$2;release=$3;arch=$4
# faz algo com o pacote
echo $nome $versao $release $arch
done < <(ls *rpm)
$ ./destrinchanome.sh
bacula 1.38.2 1 src
cups 1.1.23 15.3 src
dhcp 3.0.2 26.FC4 i386
gocr 0.40 1 i386
hpijs 0.9.5 1.1 i386
hplip 0.9.5 1.1 i386
ntop 3.2 0 src
pine 4.63 1el src
qmail-toaster 1.03 1.2.10 src
rac 1.3 3 i386
Quanto à comparação de versões, você pode usar o "sort -n" passando
todas as versões.
Se tiver rc1, rc2, etc... aí você tem que rever a lógica; se é mesmo RPM
que você tá mexendo, sugiro também ver o "Epoch" e outras tags.
Depois de um tempo, surgiu uma opção (ou um programa separado? não
lembro) que fazia essa comparação de versões pra mim e eu não precisei
mais me preocupar com isso. Acho que é uma das funções escondidinhas do rpm.
Bom, isso já deve botar o seu script no caminho certo ':)
--
Eliphas
Hugo Doria escreveu:
> Eu tenho vários pacotes aqui no formato
> nome-versão-arquitetura-release.extensao e preciso comparar as versões entre
> pacotes com mesmo nome e realizar uma açao apenas com o pacote mais recente.
>
> A principio eu pensei em fazer algo assim para testar a versão
>
> if [ versao-1 -gt versao-2 ]; then
> comandos;
> fi
>
> Para pegar a versão dos pacotes eu usei dentro de um for: echo $i | cut -d-
> -f2
>
> Mas isso não deu muito certo por dois motivos:
>
> 1) Alguns pacotes possuem strings na versão. Por exemplo:
> nome-1.3rc2-tal-tal.ext
>
> 2) Nem sempre o segundo campo é a versão. Em alguns pacotes o segundo campo é
> outra string. Exemplo: nome-devel-versão-tal-tal.ext
>
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/shell-script/
<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html