![Como remover a versão antiga dos snaps instalados](https://rvso.com/image/1557624/Como%20remover%20a%20vers%C3%A3o%20antiga%20dos%20snaps%20instalados.png)
Sou novo no uso do snap, tenho poucos aplicativos instalados no meu sistema, algo que noto ao executar o comando df -h
que 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 prune
manter 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 awk
dependê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 bash
um 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.retain
opçã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