Когда я работаю snap list --all
управляйте, чтобы это показало все установленные версии поспешных пакетов.
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
. Теперь я должен сделать это для всех изменений и для всех пакетов один за другим. Есть ли какая-либо команда, которая удалит отключенные или неиспользованные поспешные пакеты с одной строкой команды?
Заранее спасибо...
Я изучу добавление этого когда-то скоро (как 20%-я вещь). Между тем Вы могли отбросить
#!/bin/sh
set -eu
snap list --all | awk '/disabled/{print $1, $3}' |
while read snapname revision; do
snap remove "$snapname" --revision="$revision"
done
в сценарий оболочки и выполненный это.
Возможность произвести чистку/удалить старых/отключенных снимков была обсуждена ранее, но еще не реализована. Тем временем, к сожалению, это - ручной процесс.
Основываясь на предыдущих ответах, необходимо, вероятно, делать что-то как:
snap list --all | awk '$5~"disabled"{print $1" --revision "$3}' | xargs -rn3 snap remove
Который старается не испускать ошибку, когда нет никакого отключенного поспешного пересмотра и не ищет "отключенный" конкретно в столбце примечаний.
Построение @Chipaca, @Ctrl-C и предложения @Pablo Lalloni:
snap list --all | awk '$5~"disabled"{print $1" --revision "$3}' | xargs -rn3 snap remove
Это ищет "отключенный" в столбце "Notes" snap list --all
и выполнения snap remove <snap> --revision <rev>
из соответствующего снимка.
Я нашел более изящным и простым в использовании на псевдониме (использующий одинарные кавычки) это решение:
snap list --all | while read snapname ver rev trk pub notes; do if [[ $notes = *disabled* ]]; then sudo snap remove "$snapname" --revision="$rev"; fi; done
Начав со снимка 2.34 и позже, можно определить максимальный номер изменений снимка, сохраненных системой установкой a refresh.retain
опция (источник).
sudo snap set system refresh.retain=2
После просмотра примечание от Майка о разрыве этих скриптов между версиями из-за изменения количества выходных столбцов, я пошел посмотреть, есть ли какие-либо машиночитаемые привязки к этому материалу.
Я нашел REST API snapd.
Эквивалентом snap list --all
является
curl --silent --show-error \
--get --data select=all \
--unix-socket /run/snapd.socket \
http://localhost/v2/snaps
он возвращает JSON. Чтобы отфильтровать его до неактивных пакетов и включить в список команд snap remove
, вы можете использовать jq
:
jq --raw-output '
.result[] |
select(.status != "active") |
"snap remove --revision=\(.revision|@sh) \(.name|@sh)"
'
Технически вы можете запустить все это на одном строки (разрывы я вставил для удобства чтения), но их довольно мало, поэтому я обернул их в скрипт: remove-disabled-snaps.sh
еще один вариант из списка, с помощью параллельного
snap list --all | awk '/disabled/{printf "snap remove %s --revision=%i \n",$1,$3}' | parallel
удаления всех отключенных
снапов в моей системе
core18 (revision 1705) removed
code (revision 33) removed
core (revision 9066) removed
gnome-3-34-1804 (revision 33) removed
powershell (revision 131) removed
snap-store (revision 433) removed
snapd (revision 7264) removed
rpi-imager (revision 28) removed