Ryk*_*yko 37 package-management 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 -
Run Code Online (Sandbox Code Playgroud)
现在有很多已禁用的软件包不再使用。所以我想删除那些包。这里的命令是snap remove gnome-3-26-1604 --revision=62. 现在我必须对所有的修订和所有的包一一进行。是否有任何命令可以使用单行命令删除禁用或未使用的 snap 包?
提前致谢...
Chi*_*aca 33
我很快就会考虑添加这个(作为 20% 的东西)。同时,你可以放下
#!/bin/sh
set -eu
snap list --all | awk '/disabled/{print $1, $3}' |
while read snapname revision; do
snap remove "$snapname" --revision="$revision"
done
Run Code Online (Sandbox Code Playgroud)
进入一个shell脚本并运行它。
Pab*_*chi 14
我发现这个解决方案更优雅且易于使用别名(使用单引号):
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
Run Code Online (Sandbox Code Playgroud)
从 snap 2.34 及更高版本开始,您可以通过设置refresh.retain选项 ( source )来设置系统存储的快照修订的最大数量。
sudo snap set system refresh.retain=2
Run Code Online (Sandbox Code Playgroud)
您还可以通过删除 snap 的缓存来释放一些空间:
sudo snap set system refresh.retain=2
Run Code Online (Sandbox Code Playgroud)
小智 9
基于之前的答案,您可能应该这样做:
LANG=C snap list --all | awk '/disabled/{print $1" --revision "$3}' | xargs -rn3 snap remove
Run Code Online (Sandbox Code Playgroud)
这可以避免在没有禁用的快照修订时发出错误,并在注释列中专门查找“禁用”。
在看到迈克关于这些脚本因输出列数发生变化而在版本之间中断的注释后,我去查看是否有任何机器可读的绑定到这些东西。
我发现的是snapd 的 REST API。
等价snap list --all于是
curl --silent --show-error \
--get --data select=all \
--unix-socket /run/snapd.socket \
http://localhost/v2/snaps
Run Code Online (Sandbox Code Playgroud)
它返回 JSON。要将其过滤为非活动包并将其转换为snap remove命令列表,您可以使用jq:
jq --raw-output '
.result[] |
select(.status != "active") |
"snap remove --revision=\(.revision|@sh) \(.name|@sh)"
'
Run Code Online (Sandbox Code Playgroud)
从技术上讲,您可以在一行上运行所有这些内容(我插入的中断是为了提高可读性),但它的数量相当多,所以我将其包装在一个脚本中:remove-disabled-snaps.sh