当我运行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
清除/删除旧的/禁用的快照的功能已被讨论以前有过,但尚未实施。目前不幸的是,这是一个手动过程。