모든 종속 항목을 포함하여 Homebrew 패키지 제거 / 제거


339

나는이 브루의 내가 / 제거하고자 다른 패키지 (일명 의존 패키지를 건너 뛰는 모든 종속성과 함께 제거하는 것이 공식을 캐스 케이 딩 패키지 제거 패키지 관리자 용어로).

예를 들어, 패키지 a에 의존하는 패키지 b&를 제거합니다 c. 여기서 패키지 d는 패키지에 의존합니다 c. 결과는 a&를 모두 제거 b하고 건너 뛰어야 c합니다.

어떻게해야합니까?

불필요한 정크 를 남기지 않고 패키지를 제거하는 방법이 있어야합니다 .


3
이 이름을 가진 패키지 관리자가 즉시 사용하지 않는 것이 아닌가?! LOL
mljrg

답변:


407

편집하다:

또는 이라는 외부 명령을 사용하여 문제가 해결 된brew rmdepsbrew rmtree 것 같습니다 .

설치하고 사용하려면 다음 명령을 실행하십시오.

$ brew tap beeftornado/rmtree
$ brew rmtree <package>

자세한 내용과 토론은 위의 링크를 참조하십시오.


원래 답변 :

현재로서는 이것을 달성하는 쉬운 방법이없는 것으로 보입니다.

그러나 Homebrew의 GitHub 페이지에 문제를 제기했으며 누군가이 문제 를 해결하기 위해 독점적 인 명령을 추가 할 때까지 임시 해결책을 제안했습니다.

있어 외부 명령 이라는 brew leaves다른 패키지의 의존성이 아닌 모든 패키지를 출력합니다.

당신이 논리적 할 경우 의 출력을 brew leaves하고 brew deps <package>, 당신은 당신이 나중에 수동으로 제거 할 수 있습니다 분리 된 종속 패키지의 목록을 얻을 수 있습니다. 이것과 결합 xargs하면 필요한 것을 얻을 수 있습니다 (추천하지 않음).


편집 : 누군가가 join대신 다음을 사용하여 매우 유사한 솔루션을 제안했습니다 xargs.

brew rm FORMULA
brew rm $(join <(brew leaves) <(brew deps FORMULA))

자세한 내용은 위에서 언급 한 문제에 대한 의견을 참조하십시오 .


4
두 번째 줄에는 오류가 This command requires a keg argument있습니다..
Shmidt

7
타사 brew rmtree스크립트는 이제 탭에서 사용할 수 있습니다 :brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
Nick McCurdy

1
@NicolasMcCurdy 내가 시도하고 이것이 실제로 가장 설득력있는 방법임을 확인할 수 있습니다.
Ory Band

1
brew rm $(join <(brew leaves) <(brew deps FORMULA))일을 잘합니다. 모든 종속성이 제거 될 때까지 반복해서 실행해야합니다. 종속성이 서로 종속되어 있기 때문에 모든 것을 한 번에 제거 할 수는 없습니다.
Greg Wang

1
&& brew install brew-rmtree더 이상 필요하지 않습니다.
Boris

34

여기서 목표는 다른 패키지의 종속성을 손상시키지 않고 지정된 패키지와 해당 종속성을 제거하는 것 입니다. 이 명령을 사용합니다.

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | xargs brew install

참고 : @alphadogg의 유용한 의견을 반영하여 편집했습니다.


이 기능 --ignore-dependencies을 사용하려면 제거 를 추가 해야했습니다.
alphadogg

2
다른 패키지에 사용되는 뎁스를 다시 설치하지 않았기 때문에 brew 구성이 중단되었습니다. 사용
금지

26

brew rmtree 전혀 작동하지 않습니다 . 그 문제에 대한 링크에서 실제로 작동하는 rmrec 을 발견 했습니다. 하나님께서는 왜 brew이것을 기본 명령으로 가지고 있지 않은지 아십니다 .

brew tap ggpeti/rmrec
brew rmrec pkgname

이미 자신을 제거하는 경로를 시작하고 제거해야 할 더 많은 패키지를 계속 찾은 경우 여전히 가장 넓은 패키지가 무엇인지 알아야하거나 간단히 다시 설치 한 [FORMULA]다음 rmrec를 사용할 수 있습니다. 모든 의존성을 올바르게 재귀 적으로 제거하십시오.
dragon788

2
주의 사항 : 또한 rmrec현재 네임 스페이스 패키지를 잘 처리하지 못하는 것으로 보입니다 . 나는 가져온 linuxbrew/xorg/xorg것을 사용하고 있었고 그 패키지를 제외한 모든 것을 제거했으며 심지어 패키지를 명시 적으로 명명하지 않으면 그것을 해결할 수 없었고 아무것도하지 않았습니다.
dragon788

사용 권장 사항 rmrec이 잘못 되었음을 확인했습니다 . 종속성을 전혀 처리하지 않습니다.
omdv

당신은 의미 rmtree합니까? rmrec종속성을 처리합니다.
Timmmm

1
God knows why brew doesn't have this as a native command.=> 양조 개발자에게는 나쁜 태도가 있기 때문입니다. 그들은 심지어 사람들이 어떤 문제를 열도록 허용하지도 않습니다. github.com/Homebrew/brew를 확인하십시오 . 현재 20 개 미만의 문제가 있습니다. 그런 작은 숫자. 그게 좋은가요? 아냐, 아주 나빠
sgon00

15

@jfmercer 답변 (수정 사항은 의견 이상 필요)을 기반으로합니다.

패키지의 종속성을 제거하십시오 (패키지를 제거하지 않음).

brew deps [FORMULA] | xargs brew remove --ignore-dependencies

패키지 제거 :

brew remove [FORMULA]

누락 된 라이브러리를 다시 설치하십시오.

brew missing | cut -d: -f2 | sort | uniq | xargs brew install

MeldMerge 릴리스를meld 감지 한 후 제거 를 테스트했습니다 .


brew와 함께 ffmpeg를 설치하여 문제가 심각하게 엉망이되었습니다. 위에서 설명한 방법으로 확장 된 종속성 목록을 포함하여 ffmpeg를 정리하면 나에게 도움이되었습니다.
webtweakers

13

이 답변을 사용하려면 시스템에 설치하려는 패키지 이름이 포함 된 파일을 작성하고 유지 관리해야합니다. 아직없는 경우 다음 명령을 사용하여 설치하지 않으려는 패키지 이름을 삭제하십시오.

brew leaves > brew_packages

그런 다음 다음 명령을 실행하여 설치되었지만 원치 않는 패키지 및 불필요한 종속성을 모두 제거 할 수 있습니다.

brew_clean brew_packages

brew_cleanhttps://gist.github.com/cskeeters/10ff1295bca93808213d에 있습니다.

이 스크립트는 brew_packages에 지정한 모든 패키지와 모든 종속 항목을 가져 와서 결과와 비교 brew list하여 사용자와이 목록을 확인한 후 원하지 않는 패키지를 제거합니다.

이 시점에서 패키지를 제거 a하려면 brew_packages 파일에서 패키지를 제거한 다음 다시 실행하면 brew_clean brew_packages됩니다. 제거 b되지만 제거 되지는 않습니다 c.


양조 청소가 내장되어 있다고 생각합니다.brew clean -s
Devin G Rhode

1
설명이 잘못되었습니다. 편집은 5 분에 잘립니다. 시도brew cleanup -s && brew cask cleanup
Devin G Rhode

5

이를 위해 UNIX 파이프를 사용할 수 있습니다

brew deps [FORMULA] | xargs brew rm

12
이것은 좋은 해결책이 아닙니다. 이 방법으로 다른 패키지의 종속성을 깰 수 있습니다.
Ory Band

12
나중에 다른 brew missing명령을 실행하여 다시 가져 오기 위해 실행해야하는 명령을 알려주는 명령이 있습니다.
SeanJA

4

다음 스크립트를 brew-purge 로 저장하십시오.

#!/bin/bash
#:Usage: brew purge formula
#: 
#:Removes the package and all dependancies.
#: 
#: 
PKG="$1"
if [ -z "$PKG" ];then
   brew purge --help
   exit 1
fi
brew rm $PKG
[ $? -ne 0 ] && exit 1
while brew rm $(join <(brew leaves) <(brew deps $PKG)) 2>/dev/null
  do :
done
echo Package $PKG and its dependancies have been removed.
exit 0

이제 다음 명령으로 설치하십시오

sudo install brew-purge /usr/local/bin

이제 실행 해

brew purge package

gpg를 사용하는 예

$ brew purge gpg
Uninstalling /usr/local/Cellar/gnupg/2.2.13... (134 files, 11.0MB)
Uninstalling /usr/local/Cellar/adns/1.5.1... (14 files, 597.5KB)
Uninstalling /usr/local/Cellar/gnutls/3.6.6... (1,200 files, 8.9MB)
Uninstalling /usr/local/Cellar/libgcrypt/1.8.4... (21 files, 2.6MB)
Uninstalling /usr/local/Cellar/libksba/1.3.5... (14 files, 344.2KB)
Uninstalling /usr/local/Cellar/libusb/1.0.22... (29 files, 508KB)
Uninstalling /usr/local/Cellar/npth/1.6... (11 files, 71.7KB)
Uninstalling /usr/local/Cellar/pinentry/1.1.0_1... (12 files, 263.9KB)
Uninstalling /usr/local/Cellar/libassuan/2.5.3... (16 files, 444.2KB)
Uninstalling /usr/local/Cellar/libtasn1/4.13... (59 files, 436KB)
Uninstalling /usr/local/Cellar/libunistring/0.9.10... (54 files, 4.4MB)
Uninstalling /usr/local/Cellar/nettle/3.4.1... (85 files, 2MB)
Uninstalling /usr/local/Cellar/p11-kit/0.23.15... (63 files, 2.9MB)
Uninstalling /usr/local/Cellar/gmp/6.1.2_2... (18 files, 3.1MB)
Uninstalling /usr/local/Cellar/libffi/3.2.1... (16 files, 296.8KB)
Uninstalling /usr/local/Cellar/libgpg-error/1.35... (27 files, 854.8KB)
Package gpg and its dependancies have been removed.
$ 

2

다른 답변은 저에게 효과가 없었지만 ( fish셸에서)

brew remove <package>
for p in (brew deps <package>)
    brew remove $p
end

brew remove $p다른 패키지가에 의존하면 실패 하기 때문 입니다 p.


2

보다 완전한 Bourne Shell 기능

이미 좋은 답변이 많이 있지만 일부는 오래되었고 완전히 완료된 것은 없습니다. 특히, 이들 중 대부분은 종속성을 제거하지만 나중에 원래 타겟팅 된 수식을 제거하도록 유지합니다. 게시 된 한 줄은 한 번에 둘 이상의 수식을 제거하려는 경우 작업하기가 지루할 수 있습니다.

다음은 공식 목록을 가져 와서 각 종속 항목을 제거하고 공식 자체의 모든 복사본을 제거한 다음 누락 된 종속성을 다시 설치하는 Bourne 호환 쉘 기능 (알려진 Bashisms 없음)입니다.

unbrew () {
    local formula
    for formula in "$@"; do
        brew deps "$formula" |
        xargs brew uninstall --ignore-dependencies --force
        brew uninstall --force "$formula"
    done
    brew missing | cut -f2 -d: | sort -u | xargs brew install
}

Homebrew 1.7.4에서 테스트되었습니다.

경고

이것은 내가 테스트 한 모든 표준 수식에서 작동합니다. 현재 통을 다루지는 않지만 표준 공식 (예 : MacVim)과 같은 이름의 통을 추출하려고하면 크게 불평하지 않습니다.


1

@jfmercer의 답변은 출력 brew missing이 변경 되었으므로 현재 맥주와 함께 작동하도록 약간 수정해야합니다 .

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.