如何使用一行命令删除已禁用(未使用)的 snap 包?

如何使用一行命令删除已禁用(未使用)的 snap 包?

当我运行snap list --all命令时,它会显示所有已安装的 snap 包版本。

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     -

现在有很多已禁用的软件包不再使用。所以我想删除这些软件包。命令如下snap remove gnome-3-26-1604 --revision=62。现在我必须对所有修订版本和所有软件包逐一执行此操作。是否有任何命令可以用一行命令删除已禁用或未使用的 snap 软件包?

提前致谢...

答案1

我会考虑尽快添加这个(作为 20% 的东西)。与此同时,你可以放弃

#!/bin/sh
set -eu

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

放入 shell 脚本并运行它。

答案2

我发现它更优雅、更易于使用此解决方案在别名上(使用单引号):

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

从 snap 2.34 及更高版本开始,你可以通过设置refresh.retain(来源):

sudo snap set system refresh.retain=2

您还可以通过以下方式释放一些空间删除 snap 的缓存

sudo du -sh /var/lib/snapd/cache/                  # Get used space
sudo find /var/lib/snapd/cache/ -exec rm -v {} \;  # Remove cache

有关的

答案3

根据以前的答案,您可能应该做类似的事情:

LANG=C snap list --all | awk '/disabled/{print $1" --revision "$3}' | xargs -rn3 snap remove

这样可以避免在没有禁用快照修订时发出错误,并在注释列中专门查找“已禁用”。

答案4

清除/删除旧的/禁用的快照的功能已被讨论以前有过,但尚未实施。目前不幸的是,这是一个手动过程。

相关内容