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-----