Re: Nettoyer un répertoir e plein de .deb ?

Pierre Habouzit <[email protected]>
Newsgroups gmane.linux.debian.devel.french
Message-ID <[email protected]>
On Mon, Aug 03, 2009 at 09:56:00PM +0200, Pierre Habouzit wrote:
> On Mon, Aug 03, 2009 at 04:02:43PM +0200, Éric Seigne wrote:
> > Bonjour,
> > es-ce qu'il existe une commande rapide et efficace pour faire le
> > ménage dans un dossier plein de paquets .deb pour ne garder que ceux
> > dont les numéros de versions sont les plus récents ?
> > 
> > Par exemple j'ai
> > 
> > package_1.2.0-0_i386.deb
> > package_1.2.0-1_i386.deb
> > package_1.3.1-0_i386.deb
> > package_1.3.4-6_i386.deb
> > package_1.3.4-7_i386.deb
> > 
> > et je ne veux garder que le dernier ... y a ça, sans se lancer dans
> > des outils de gestion de dépots ?
> > 
> > Merci d'avance,
> > Éric

Sauf que ça ne marche pas... parce que je pars du principe que le
file-name contient l'époch ce qui est généralement faux...

Le fix suivant devrait corriger ça:
 
 #!/bin/sh
 
 dry_run=
 
 doit() {
     $dry_run "$@"
 }
 
 while test $# != 0; do
     case "$1" in
         -n) dry_run=echo ;;
         --) shift; break; ;;
         *)  break ;;
     esac
     shift
 done
 
 if test $# != 1; then
     echo "usage: foo.sh <directory>" 2>&1
     exit 1
 fi
 
 cd "$1"
 
 for p in $(ls *.deb|sed -e 's/_.*//'|sort -u); do
     keep=
+    keep_v=
     for v in $(ls "${p}_"*".deb" | sed -e 's/^[^_]*_\([^_]*\)_[^_]*\.deb$/\1/'); do
+        ver=$(dpkg --info binutils-dev_2.19.51.20090704-1_amd64.deb|sed -ne '/Version: /{s/ *Version: *//p;q}')
         if test -z "$keep"; then
             keep=$v
+            keep_v=$ver
-        elif dpkg --compare-versions "$keep" gt "$v"; then
+        elif dpkg --compare-versions "$keep_v" gt "$ver"; then
             doit rm -f "${p}_${v}_*.deb"
         else
             doit rm -f "${p}_${keep}_*.deb"
             keep=$v
+            keep_v=$ver
         fi
     done
 done


Et sinon la bonne manière est d'utiliser dpkg --info et de prendre le
Package: et Version:, de trier pour chaque Package: unique par ordre de
Version: selon dpkg --compare-versions, et de ne conserver que le
dernier de chaque. Je pense que dpkg --compare-versions est accessible
depuis perl-apt (si ça existe) et je suis sur que c'est accessible
depuis python-apt pour l'utiliser dans apt-listchanges. Mais j'ai la
flemme d'écrire le script en question.


-- 
Intersec <http://www.intersec.com>
Pierre Habouzit <[email protected]>
Tél : +33 (0)1 5570 3346
Mob : +33 (0)6 1636 8131
Fax : +33 (0)1 5570 3332
37 Rue Pierre Lhomme
92400 Courbevoie
signature.asc (application/pgp-signature, 197 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkp3RxkACgkQvGr7W6Hudhw0CACaAu/34tq0LCJ+MEJc+D0dKsoX
JAQAn2JCxeBuww6OtxmQxqqQQVybUfYc
=uWHW
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.