Hallo Waldemar, * Waldemar Brodkorb <520052027732-0001@t-online.de> [05-08-01 18:55]: > habe endlich Zeit gefunden an dem sitar.pl zu basteln. Heisst das, dass Du es jetzt doch alleine machen moechtest? > Wie bekomme ich am besten mit Perl eine Liste aller installierten > Pakete in der Form hin: > Paketname::Version::Größe::Kurzbeschreibung > > Etwas adäquates zu: > rpm -qa --queryformat '%{NAME}::%{VERSION}::%{SIZE}::%{SUMMARY}' > > Mit dpkg scheint es nicht zu gehen. Aber mit dpkg-awk: dpkg-awk "Status:.* installed$" -- Package Version installed-size Description > Irgendwie die Datei /var/lib/dpkg/status parsen und dann > die Info in ein Array bekommen, wie geht das? Ich hatte ein aehnliches Problem und da ich dpkg-awk erst seid 2 Stunden kenne, habe ich das folgendermaßen gemacht: (Angepasst fuer Dein Problem) ----8<---- use Fcntl; sysopen (STATUS, "/var/lib/dpkg/status", O_RDONLY) || die "can't open '/var/lib/dpkg/status'"; $pos[0]=0; # erste Position = 0 (Dateianfang) while (<STATUS>) { $pos[$#pos+1] = tell if /^$/; } for ($i=0;$i<$#pos;$i++) { # alles von $pos bis zur naechsten Leerzeile in $package[i] # schreiben seek (STATUS, $pos[$i], seek_set) || die "can't seek!"; while (<STATUS>) { last if /^$/; $package[$i] .= $_; } } close STATUS; # zweite for Schleife weils dann deutlich schneller geht. for ($i=0;$i<$#package;$i++) { # Paket installier oder nicht? if ($package[$i] =~ /^Status:.* installed$/im) { # alles ausser Version, Discr. etc. löschen $package[$i] =~ s/(^Package:.*$)(\n.*)*(^Installed-Size:.*$)(\n.*)*(^Version:.*$)(\n.*)*(^Description:.*(\n.*)*$)/$1\n$3\n$5\n$7/im; print "$package[$i]\n"; # }else{ # splice @package, $i, 1; } } #print @package; ----8<---- Wenn Du weißt, warum das split im Else-Zweig nicht funktioniert, kannst Du es korrigieren und dann hast Du ein Array dessen Elemente Name, Version, Size und Discr. fuer jeweils ein Paket enthalten. Jetzt wird das nur ausgegeben und das Array enthaelt auch Pakete die nicht installiert sind. Fuer sitar ist das IMO besser als dpg-awk. Aber warum willst eigentlich nur die vier Felder haben? Depends, Section, Priority und Status sind doch auch interessant. Janto -- Janto Trappe Germany /* rapelcgrq znvy cersreerq! */ GnuPG-Key: http://www.sylence.de/gpgkey.asc Key ID: 0x8C53625F Fingerprint: 35D7 8CC0 3DAC 90CD B26F B628 C3AC 1AC5 8C53 625F
Attachment:
pgp6tFKoLU5tv.pgp
Description: PGP signature