Tek bir komut satırı ile devre dışı bırakılan (kullanılmayan) ek paketleri nasıl kaldırabilirim?


19

snap list --allKomutu çalıştırdığımda , ek paketlerin tüm yüklü sürümlerini gösterir.

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     -

Şimdi artık kullanılmayan çok sayıda devre dışı paket var. Bu paketleri kaldırmak istiyorum. İşte komut snap remove gnome-3-26-1604 --revision=62. Şimdi bunu tüm revizyonlar ve tüm paketler için tek tek yapmak zorundayım. Devre dışı bırakılan veya kullanılmayan ek paketleri tek bir komut satırı ile kaldıracak herhangi bir komut var mı?

Şimdiden teşekkürler...


1
Evet tabi!! Soruyu düzenledim ...
Ryko

Önceki tek bir sürümü tutmanın tasarım gereği olduğunu unutmayın : bir ek güncelleme olduğunda, eski düzeltme kaldırılacaktır.
muru

Ancak burada gimp'in 3 versiyonu var (revizyon-30,38,39). Revizyon 38 ve 39'un aynı sürümleri olmasına rağmen ... Bu uygulamalardan herhangi biri daha fazla güncelleme aldığında sizi bilgilendireceğim ...
Ryko

Snap uygulamalarının önceki sürümlerini saklamayı devre dışı bırakabilmem için ek olarak kullanılabilecek ayarlar var mı ... Bazıları çok fazla alan gerektirdiğinden ... libre-office neredeyse 2GB alan kaplıyorsa ve önceki sürüm dahil 4GB olur.
Ryko

Bu şu anda bir snapd geliştiricisi tarafından üzerinde çalışılıyor: github.com/snapcore/snapd/pull/5207
Zygmunt Krynicki

Yanıtlar:


22

Bunu yakında ekleyeceğim (% 20'lik bir şey olarak). Bu arada düşebilirsin

#!/bin/sh
set -eu

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

bir kabuk betiğine dönüştürün ve çalıştırın.


Ben öne eklemek istiyorum sudo için geçmeli komutları.
Pierre François

1
hayır, bunu yapma: sudo arayan tarafından açıkça yapılmalıdır.
Chipaca

dahası, mutlaka snap removesnap login
sudo'ya

1
xargsBir oneliner yapmak için kullanabilirsiniz :)
Ctrl-C

@ Ctrl-C Ben bunun için git diyorum
Chipaca

4

Bir takma adda (tek tırnak kullanarak) bu çözümü daha zarif ve kullanımı kolay buldum :

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

2.34 ve sonraki sürümlerden başlayarak, bir refresh.retainseçenek ( kaynak ) ayarlayarak sistem tarafından saklanan bir anlık görüntünün maksimum revizyon sayısını ayarlayabilirsiniz .

sudo snap set system refresh.retain=2 

2

Eski / engelli snap'ları temizleme / temizleme yeteneği daha önce tartışılmış ancak henüz uygulanmamıştır. Bu arada maalesef manuel bir süreç.


1
Bunu otomatikleştirmek için kolayca ayrıştırılabilen çıtçıtlar (JSON veya benzeri) hakkında makine tarafından okunabilir bilgi almak için yine de var mı?
muru

1
Tartışma aslında eski çıtçıtların otomatik olarak kaldırıldığını not ediyor gibi görünüyor, böylece en fazla üç tane var. Tartışma, sayıyı yapılandırılabilir yapmakla ilgilidir.
nealmcb

1

Önceki yanıtlara dayanarak, muhtemelen şöyle bir şey yapmalısınız:

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

Bu, devre dışı bırakılan ek düzeltme olmadığında hata yayılmasını önler ve özellikle notlar sütununda "devre dışı" arar.


oh hah Cevabımı hakkındaki yorumlarınıza dayanarak düzenledim, ancak temel olarak aynı bir cevap eklediğinizi gördüm :)
casper.dcl

4
Ne yazık ki snap sürümünde (Ubuntu 18.10 üzerinde 2.38 + 18.10), Notlar sütunu $6yerine $5. snap listKomut gerçekten ihtiyacı --formatolduğu çıktı komut dosyası için tutarlı olabilirsiniz seçeneği.
Mike Hicks


0

@Chipaca, @ Ctrl-C ve @Pablo Lalloni'nin önerileri:

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

Bu karşılık gelen ekin "Notlar" sütununda "devre dışı" arar snap list --allve çalışır snap remove <snap> --revision <rev>.


Ben alamadım
Pierre.Vriens

Xarg'ın -r bayrağını kullanarak hatayı önleyebilirsiniz.
Pablo Lalloni

Sorun şu ki, komut adında "devre dışı" olan snaps kaldırmak olabilir ... olası değil ...
Pablo Lalloni

0

Mike'ın bu komut dosyalarının sürümler arasında kırıldığıyla ilgili notunu gördükten sonra çıktı sütunlarının sayısı değişti, bu şeylerde makine tarafından okunabilen herhangi bir bağlantı olup olmadığını görmek için gittim.

Bulduğum şey snapd'nin REST API'sıydı .

Eşdeğer snap list --allIS

curl --silent --show-error \
    --get --data select=all \
    --unix-socket /run/snapd.socket \
    http://localhost/v2/snaps

JSON döndürür. Etkin olmayan paketlere filtrelemek ve bir snap removekomut listesine dönüştürmek için şunları kullanabilirsiniz jq:

jq --raw-output '
    .result[] | 
    select(.status != "active") | 
    "snap remove --revision=\(.revision|@sh) \(.name|@sh)"
'

Teknik olarak tüm bunları tek bir satırda çalıştırabilirsiniz (eklediğim sonlar okunabilirlik içindir), ancak oldukça kullanışlı , bu yüzden bir betiğe sardım : remove-disabled-snaps.sh

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.