[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Nettoyer un répertoire plein de .deb ?



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 <pierre.habouzit@intersec.com>
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

Attachment: signature.asc
Description: Digital signature


Reply to: