कमांड की सिंगल लाइन के साथ अक्षम (अप्रयुक्त) स्नैप पैकेज कैसे निकालें?


19

जब मैं 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
हां यकीनन!! मैंने प्रश्न संपादित किया है ...
रयको

ध्यान दें कि एक ही पिछले संस्करण को रखना डिजाइन द्वारा है : जब एक स्नैप अपडेट किया जाता है, तो पुराने संशोधन को हटा दिया जाएगा।
मुरु

लेकिन यहाँ जिम्प के 3 संस्करण हैं (संशोधन -30,38,39)। हालाँकि संशोधन 38 और 39 के एक ही संस्करण हैं ... मैं आपको बाद में सूचित करूँगा जब इस ऐप में से किसी को और अपडेट मिलेगा ...
रयको

क्या स्नैप में कोई सेटिंग्स उपलब्ध है ताकि मैं स्नैप एप्लिकेशन के पिछले संस्करणों को रखने में अक्षम कर सकूं ... क्योंकि उनमें से कुछ को बहुत अधिक स्थान की आवश्यकता होती है ... जैसे कि लेबर-ऑफिस लगभग 2GB स्थान लेता है, और यदि पिछला संस्करण है शामिल यह 4GB हो जाता है।
रायको

यह अब एक स्नैप डेवलपर द्वारा काम किया जा रहा है: github.com/snapcore/snapd/pull/5207
Zygmunt Krynicki

जवाबों:


22

मैं इसे जल्द ही जोड़ने की कोशिश करूँगा (20% के रूप में)। इस बीच, आप छोड़ सकते हैं

#!/bin/sh
set -eu

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

एक शेल स्क्रिप्ट में और उसे चलाएं।


मैं स्नैप आदेशों के लिए एक sudo प्रस्तुत करना होगा ।
पियरे फ्रांस्वा

1
नहीं, ऐसा न करें: सुडो को कॉलर द्वारा स्पष्ट रूप से किया जाना चाहिए।
चिपका

इसके अलावा, आपको जरूरी नहीं कि snap removesnap login
सूडो के

1
आप xargsइसे ऑनलाइनर बनाने के लिए उपयोग कर सकते हैं :)
Ctrl-C

@ Ctrl-C मैं कहता हूं कि इसके लिए जाओ
चिपका

4

मैं इस समाधान का एक उपनाम (एकल उद्धरणों का उपयोग करके) अधिक सुरुचिपूर्ण और आसान पाया गया :

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 से शुरू और बाद में, आप refresh.retainविकल्प ( स्रोत ) सेट करके सिस्टम द्वारा संग्रहीत स्नैप के संशोधन की अधिकतम संख्या निर्धारित कर सकते हैं ।

sudo snap set system refresh.retain=2 

2

पुराने / अक्षम स्नैप को शुद्ध / हटाने की क्षमता पर पहले भी चर्चा की जा चुकी है लेकिन अभी तक इसे लागू नहीं किया गया है। इस बीच दुर्भाग्य से यह एक मैनुअल प्रक्रिया है।


1
वैसे भी स्नैप्स (JSON या समान) के बारे में मशीन-पठनीय जानकारी प्राप्त करने के लिए आसानी से इसे स्वचालित करने के लिए पार्स किया जा सकता है?
मुरु

1
ऐसा लगता है कि चर्चा वास्तव में नोट करती है कि पुराने स्नैप स्वचालित रूप से हटा दिए जाते हैं, ताकि अधिकतम तीन हों। चर्चा को विन्यास योग्य बनाने के बारे में है।
nealmcb

1

पिछले उत्तरों पर निर्माण, आपको शायद कुछ ऐसा करना चाहिए:

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

जब कोई अक्षम स्नैप संशोधन नहीं होने पर त्रुटि से बचा जाता है और विशेष रूप से नोट्स कॉलम में "अक्षम" दिखता है।


ओह हह मैंने उस पर आपकी टिप्पणियों के आधार पर अपना उत्तर संपादित किया, लेकिन बस देखा कि आपने मूल रूप से समान उत्तर जोड़ा है :)
casper.dcl

4
दुर्भाग्य से मेरे स्नैप के संस्करण में (Ubuntu 18.10 पर 2.38 + 18.10), नोट्स कॉलम $6बजाय है $5snap listआदेश वास्तव में एक की जरूरत है --formatताकि उत्पादन स्क्रिप्टिंग के लिए संगत हो सकता है विकल्प।
माइक हिक्स

@ माइकइक्स आप यहां बग दर्ज
पाब्लो

0

@Chipaca, @ Ctrl-C और @ पाब्लो लल्लोनी के सुझावों पर बिल्डिंग:

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

यह इसी नोट के "नोट्स" कॉलम में "अक्षम" snap list --allऔर snap remove <snap> --revision <rev>संबंधित स्नैप के रन के लिए खोज करता है।


मुझे यह नहीं मिला
पियरे.वियर्स

आप xarg -r ध्वज का उपयोग करके त्रुटि से बच सकते हैं।
पाब्लो लल्लोनी

समस्या यह है कि कमांड इसके नाम में "अक्षम" के साथ स्नैप्स को हटा सकता है ... संभावना नहीं है लेकिन ...
पाब्लो लल्लोनी

0

माइक से नोट देखने के बाद इन स्क्रिप्ट्स को संस्करणों के बीच तोड़ने के बारे में क्योंकि आउटपुट कॉलम की संख्या बदल गई, मैं यह देखने के लिए गया कि क्या इस सामान के लिए कोई मशीन-पठनीय बाइंडिंग हैं या नहीं।

मुझे जो मिला वह स्नैप का REST API था

के बराबर 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)"
'

आप तकनीकी रूप से एक लाइन पर (मेरे द्वारा डाले गए विराम पठनीयता के लिए हैं) पर सभी चला सकते हैं, लेकिन यह काफी मुट्ठी भर है, इसलिए मैंने इसे एक स्क्रिप्ट में लपेट दिया: हटाएं- disabled-snaps.sh

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.