Как удалить отключенные (неиспользованные) поспешные пакеты с одной строкой команды?

Когда я работаю 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 . Теперь я должен сделать это для всех изменений и для всех пакетов один за другим. Есть ли какая-либо команда, которая удалит отключенные или неиспользованные поспешные пакеты с одной строкой команды?

Заранее спасибо...

17
задан 16 May 2018 в 01:46

7 ответов

Я изучу добавление этого когда-то скоро (как 20%-я вещь). Между тем Вы могли отбросить

#!/bin/sh
set -eu

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

в сценарий оболочки и выполненный это.

21
ответ дан 23 November 2019 в 02:21

Возможность произвести чистку/удалить старых/отключенных снимков была обсуждена ранее, но еще не реализована. Тем временем, к сожалению, это - ручной процесс.

2
ответ дан 23 November 2019 в 02:21

Основываясь на предыдущих ответах, необходимо, вероятно, делать что-то как:

snap list --all | awk '$5~"disabled"{print $1" --revision "$3}' | xargs -rn3 snap remove

Который старается не испускать ошибку, когда нет никакого отключенного поспешного пересмотра и не ищет "отключенный" конкретно в столбце примечаний.

1
ответ дан 23 November 2019 в 02:21

Построение @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> из соответствующего снимка.

0
ответ дан 23 November 2019 в 02:21

Я нашел более изящным и простым в использовании на псевдониме (использующий одинарные кавычки) это решение:

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 
3
ответ дан 23 November 2019 в 02:21

После просмотра примечание от Майка о разрыве этих скриптов между версиями из-за изменения количества выходных столбцов, я пошел посмотреть, есть ли какие-либо машиночитаемые привязки к этому материалу.

Я нашел 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

2
ответ дан 5 January 2020 в 02:22

еще один вариант из списка, с помощью параллельного

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
0
ответ дан 16 June 2020 в 21:08

Другие вопросы по тегам:

Похожие вопросы: