web-dev-qa-db-fra.com

Comment supprimer les packages de capture désactivés (non utilisés) avec une seule ligne de commande?

Lorsque j'exécute la commande snap list --all, elle affiche toutes les versions installées des packages d'accrochage.

Name                  Version       Rev   Tracking  Developer     Notes
atom                  1.26.1        150   stable    snapcrafters  classic
brave                 v0.22.669dev  23    stable    brave         -
core                  16-2.32.6     4571  stable    canonical     core
core                  16-2.32.5     4486  stable    canonical     core,disabled
firefox               59.0.2-1      71    stable    mozilla       disabled
firefox               60.0-2        85    stable    mozilla       -
gimp                  2.10.0        38    stable    snapcrafters  disabled
gimp                  2.10.0        39    stable    snapcrafters  -
gimp                  2.8.22        30    stable    snapcrafters  disabled
gnome-3-26-1604       3.26.0        64    stable/…  canonical     -
gnome-3-26-1604       3.26.0        62    stable/…  canonical     disabled
gnome-characters      3.28.0        86    stable/…  canonical     -
gnome-characters      3.26.2        69    stable/…  canonical     disabled
gnome-logs            3.26.2        25    stable/…  canonical     disabled
gnome-logs            3.28.0        31    stable/…  canonical     -
gnome-system-monitor  3.26.0        36    stable/…  canonical     disabled
gnome-system-monitor  3.26.0        39    stable/…  canonical     -
libreoffice           6.0.3.2       59    stable    canonical     disabled
libreoffice           6.0.4.2       63    stable    canonical     -

Maintenant, il y a tellement de paquets désactivés qui ne sont plus utilisés. Je veux donc supprimer ces paquets. Ici, la commande est snap remove gnome-3-26-1604 --revision=62. Maintenant, je dois le faire pour toutes les révisions et pour tous les paquets, un par un. Existe-t-il une commande permettant de supprimer les packages d'instantané désactivés ou inutilisés avec une seule ligne de commande?

Merci d'avance...

11
Ryko

Je regarderai dans l'ajout prochainement ceci (comme une chose de 20%). Pendant ce temps, vous pouvez laisser tomber

#!/bin/sh
set -eu

snap list --all | awk '/disabled/{print $1, $3}' |
    while read snapname revision; do
        snap remove "$snapname" --revision="$revision"
    done

dans un script shell et exécutez-le.

18
Chipaca

La possibilité de purger/supprimer les anciennes/désactivées snaps a été discuté précédemment, mais pas encore implémenté. En attendant, malheureusement, c'est un processus manuel.

2
popey

En vous basant sur les réponses précédentes, vous devriez probablement faire quelque chose comme:

snap list --all | awk '$5~"disabled"{print $1" --revision "$3}' | xargs -rn3 snap remove

Ce qui évite d'émettre une erreur lorsqu'il n'y a pas de révision d'accrochage désactivée et recherche "désactivé" spécifiquement dans la colonne des notes.

1
Pablo Lalloni

J'ai trouvé plus élégant et facile à utiliser sur un alias (en utilisant des guillemets simples) cette solution :

snap list --all | while read snapname ver rev trk pub notes; do if [[ $notes = *disabled* ]]; then Sudo snap remove "$snapname" --revision="$rev"; fi; done

À partir de la version 2.34 et ultérieure, vous pouvez définir le nombre maximal de révisions de capture enregistrées par le système en définissant une option refresh.retain ( source ).

Sudo snap set system refresh.retain=2 
1
Pablo Bianchi

En s'appuyant sur les suggestions de @Chipaca, @ Ctrl-C et @Pablo Lalloni:

snap list --all | awk '$5~"disabled"{print $1" --revision "$3}' | xargs -rn3 snap remove

Ceci recherche "désactivé" dans la colonne "Notes" de snap list --all et exécute snap remove <snap> --revision <rev> de la capture correspondante.

0
casper.dcl