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