Como remover a versão antiga dos snaps instalados

Como remover a versão antiga dos snaps instalados

Sou novo no uso do snap, tenho poucos aplicativos instalados no meu sistema, algo que noto ao executar o comando df -hque encontrei versões diferentes montadas do mesmo snap:

/dev/loop0       143M   143M     0 100% /var/lib/snapd/snap/gravit-designer/7
/dev/loop1        82M    82M     0 100% /var/lib/snapd/snap/core/4110
/dev/loop7       198M   198M     0 100% /var/lib/snapd/snap/polarr/3
/dev/loop2        82M    82M     0 100% /var/lib/snapd/snap/core/4206
/dev/loop3       143M   143M     0 100% /var/lib/snapd/snap/gravit-designer/6
/dev/loop10      137M   137M     0 100% /var/lib/snapd/snap/gravit-designer/5

Minha dúvida é por que eles ficam aí, a única maneira que encontrei de remover o antigo é remover e instalar novamente o snap.

Existe algo como prunemanter meu sistema?

Responder1

Aqui está um pequeno script que irá removertodosversões antigas de snaps. Isso manterá apenas a versão ativa atual, que deverá recuperar algum espaço em disco:

#!/bin/bash
# Removes old revisions of snaps
# CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu

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

O "Fechar snaps" existe porque você pode não ter reiniciado um aplicativo antes de atualizá-lo. Portanto, é possível que você esteja executando uma revisão que será removida pelo script.

Responder2

Uma versão doscript de outra resposta, como uma linha, sem a awkdependência:

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

Isso provavelmente requer bashum shell compatível com a [[construção.

Responder3

A partir do snap v2.34 e posterior, você pode definir o número máximo de revisões snap armazenadas para cada pacote definindo a refresh.retainopção - só pode ser um númeroentre 2 e 20e tem umvalor padrão de 3.

sudo snap set system refresh.retain=2 

Responder4

O código@popey compartilhou sua respostana verdade, às vezes falha, pois alguns pacotes quebrados não possuem as informações da versão. Então modifiquei o código para superar isso.

#!/bin/bash
# Removes old revisions of snaps
# CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu

snapsToRemove=$(LANG=en_US.UTF-8 snap list --all | awk '/disabled/{print $1, $2, $3}')

while read snapname version revision; do
    if [[ "$revision" == *[a-zA-z]* ]]; then
        # Version field is empty. Revision is in second field
        revision=$version
    fi
        snap remove "$snapname" --revision="$revision"
done <<< $snapsToRemove

informação relacionada