0

たとえば、http://mirror.centos.org/centos/5/updates/x86_64/RPMS/のミラーから入手できる特定のパッケージのrpmの最新バージョンを見つけるためのスクリプトを作成したいと思います。

スクリプトは、ほとんどのLinuxフレーバー(centos、redhat、ubuntuなど)で実行できる必要があります。したがって、yumベースのソリューションはオプションではありません。これを行う既存のスクリプトはありますか?または、誰かが私にこれについて行く方法についての一般的な考えを与えることができますか?

4

3 に答える 3

1

wgetcliのlevislevis85へのThx。これを試して:

ARCH="i386"
PKG="pidgin-devel"
URL=http://mirror.centos.org/centos/5/updates/x86_64/RPMS
DL=`wget -O- -q $URL | sed -n 's/.*rpm.>\('$PKG'.*'$ARCH'.rpm\).*/\1/p' | sort | tail -1`
wget $URL/$DL

ここにコメントを入れます。そうしないと、コードが読めなくなります。

これを試して:

ARCH="i386"
PKG="pidgin-devel"
URL=http://mirror.centos.org/centos/5/updates/x86_64/RPMS
DL=`wget -O- -q $URL | sed -n 's/.*rpm.>\('$PKG'.*'$ARCH'.rpm\).*<td align="right">\(.*\)-\(.*\)-\(.*\) \(..\):\(..\)  <\/td><td.*/\4 \3 \2 \5 \6 \1/p' | sort -k1n -k2M -k3n -k4n -k5n | cut -d ' ' -f 6 | tail -1`
wget $URL/$DL


wget-インデックスファイルsedを取得します-
いくつかの部分を切り取り、異なる順序でまとめます。次のように、年月日時間分とパッケージになります。

2009 Oct 27 01 14 pidgin-devel-2.6.2-2.el5.i386.rpm
2009 Oct 30 10 49 pidgin-devel-2.6.3-2.el5.i386.rpm

並べ替え-列を並べ替えるnは数値の場合はそのまま、Mは月
の切り取り-フィールドの6つの
テールを切り取ります-最後のエントリのみを表示 します

これに伴う問題は、古いパッケージのリリースが新しいものの後に来る場合、このスクリプトも失敗する可能性があります。サイトの出力が変更されると、スクリプトは失敗します。スクリプトが失敗する可能性のあるポイントは常にたくさんあります。

于 2009-12-10T17:16:51.257 に答える
1

wget と gawk を使用する

#!/bin/bash
pkg="kernel-headers"
wget -O- -q http://mirror.centos.org/centos/5/updates/x86_64/RPMS | awk -vpkg="$pkg" 'BEGIN{
    RS="\n";FS="</a>"
    z=split("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec",D,"|")
    for(i=1;i<=z;i++){
       date[D[i]]=sprintf("%02d",i)
    }
    temp=0
}
$1~pkg{
    p=$1
    t=$2
    gsub(/.*href=\042/,"",p)
    gsub(/\042>.*/,"",p)
    m=split(t,timestamp," ")
    n=split(timestamp[1],d,"-")
    q=split(timestamp[2],hm,":")
    datetime=d[3]date[d[2]]d[1]hm[1]hm[2]
    if ( datetime >= temp ){
        temp=datetime
        filepkg = p
    }
}
END{
    print "Latest package: "filepkg", date: ",temp
}'

上記の実行例:

linux$ ./findlatest.sh
Latest package: kernel-headers-2.6.18-164.6.1.el5.x86_64.rpm, date:  200911041457
于 2009-12-10T14:08:54.850 に答える
0

これを試してください(必要lynxです):

lynx -dump -listonly -nonumbers http://mirror.centos.org/centos/5/updates/x86_64/RPMS/ |
    grep -E '^.*xen-libs.*i386.rpm$' |
    sort --version-sort |
    tail -n 1

sortがない場合--version-sortは、ファイル名からバージョンを解析するか、通常の並べ替えが正しいことを期待する必要があります。

. _ wget_ curl_ /dev/tcp/HOST/PORTこれらの問題は、HTML を解析する必要があることです。

于 2009-12-10T06:26:19.540 に答える