web-dev-qa-db-ja.com

無効な(未使用の)スナップパッケージを1行のコマンドで削除する方法は?

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です。次に、すべてのリビジョンとすべてのパッケージに対して1つずつ実行する必要があります。 1行のコマンドで無効または未使用のスナップパッケージを削除するコマンドはありますか?

前もって感謝します...

12
Ryko

すぐに(20%のものとして)追加することを検討します。一方、あなたは落とすことができます

#!/bin/sh
set -eu

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

シェルスクリプトに入れて実行します。

18
Chipaca

エイリアスでよりエレガントで使いやすいことがわかりました(一重引用符を使用) このソリューション

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以降では、refresh.retainオプション( source )を設定することにより、システムに保存されるスナップのリビジョンの最大数を設定できます。

Sudo snap set system refresh.retain=2 
2
Pablo Bianchi

古いスナップ/無効なスナップを削除/削除する機能は、以前は discussed でしたが、まだ実装されていません。残念ながら、残念ながらそれは手動のプロセスです。

2
popey

以前の回答に基づいて、おそらく次のようなことを行う必要があります。

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

これにより、無効なスナップリビジョンが存在せず、特にメモ列で「無効」を検索するときにエラーが発生することを回避できます。

1
Pablo Lalloni

@ Chipaca、@ Ctrl-C、および@Pablo Lalloniの提案を基に作成:

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

これにより、snap list --allの[メモ]列​​で[無効]が検索され、対応するスナップのsnap remove <snap> --revision <rev>が実行されます。

0
casper.dcl