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

 


Responder a