한 줄의 명령으로 비활성화 된 (사용하지 않은) 스냅 패키지를 제거하는 방법은 무엇입니까?


18

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
그래! 질문을 편집했습니다 ...
Ryko

이전 버전 하나를 유지하는 것은 의도적으로 설계된 것입니다 . 스냅이 업데이트되면 이전 버전이 제거됩니다.
muru

그러나 여기 김프에는 3 가지 버전이 있습니다 (개정판 -30,38,39). 개정판 38과 39의 버전은 동일하지만 나중에이 앱이 추가로 업데이트 될 때 알려 드리겠습니다.
Ryko

snap에서 사용할 수있는 설정이 있습니까? 스냅 응용 프로그램의 이전 버전을 유지하지 못하게 할 수 있습니다 ... libre-office가 거의 2GB의 공간을 차지하고 이전 버전이 4GB가됩니다.
Ryko

이것은 현재 스냅 된 개발자에 의해 진행되고 있습니다 : github.com/snapcore/snapd/pull/5207
Zygmunt Krynicki

답변:


21

나는 이것을 언젠가 (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 명령 앞에 sudo 를 추가 합니다.
Pierre François '

1
아니오, 그렇게하지 마십시오 : sudo는 호출자가 명시 적으로 수행해야합니다.
Chipaca 14 년

또한, 당신은 반드시에 대한 sudo는 필요하지 않습니다 snap remove(당신이 한 경우 snap login)
Chipaca

1
xargsoneliner로 만들 수 있습니다 :)
Ctrl-C

@ Ctrl-C 나는 그것을 위해 가라
Chipaca

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옵션 ( source ) 을 설정하여 시스템에 의해 저장된 스냅 개정의 최대 개수를 설정할 수 있습니다 .

sudo snap set system refresh.retain=2 

2

이전 / 비활성화 된 스냅을 제거 / 제거하는 기능 이전 에 논의 되었지만 아직 구현되지 않았습니다. 불행히도 그것은 수동 프로세스입니다.


1
어쨌든 이것을 자동화하기 위해 쉽게 파싱 할 수있는 스냅 (JSON 또는 이와 유사한)에 대한 기계 판독 가능 정보를 얻을 수 있습니까?
muru

1
토론에서 실제로 오래된 스냅이 자동으로 제거되어 최대 3 개가있는 것으로 보입니다. 숫자를 구성 할 수있게 만드는 것에 대한 토론입니다.
nealmcb

1

이전 답변을 바탕으로 다음과 같은 작업을 수행해야합니다.

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

비활성화 된 스냅 리비전이 없을 때 오류가 발생하지 않도록하고 메모 열에서 특히 "비활성화"를 찾습니다.


아, 나는 그것에 대한 귀하의 의견을 바탕으로 답변을 편집했지만 방금 기본적으로 동일한 답변을 추가 한 것을 보았습니다 :)
casper.dcl

4
불행하게도 스냅 (우분투 18.10에 2.38 + 18.10)의 내 버전, 메모 열입니다 $6보다는 $5. 이 snap list명령에는 실제로 --format출력을 스크립팅하기 위해 옵션 이 필요합니다 .
Mike Hicks

@MikeHicks 당신은 여기에 버그를
Pablo Bianchi

0

@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>.


나는 그것을 얻지 못한다
Pierre.Vriens

xarg의 -r 플래그를 사용하여 오류를 피할 수 있습니다.
Pablo Lalloni 2016 년

문제는 명령이 이름에 "disabled"인 스냅을 제거 할 수 있다는 것입니다 ... 가능성은 없지만 ...
Pablo Lalloni

0

출력 열의 수가 변경 되었기 때문에 버전 사이에서 깨지는 이러한 스크립트에 대한 Mike의 메모를 본 후 , 나는 이것에 대한 기계 판독 가능한 바인딩이 있는지 확인하려고했습니다.

내가 찾은 것은 스냅의 REST API 였습니다.

동등한 snap list --allIS

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.