Odinstaluj / Usuń Pakiet Homebrew zawierający wszystkie jego zależności

MamHomebrew formułę, którą chcę odinstalować / usunąć wraz ze wszystkimi zależnościami, pomijając Pakiety, od których zależą inne pakiety (Alias kaskadowe usuwanie pakietów w języku menedżera pakietów).

np. Odinstaluj pakiet a który zależy od pakietów b & c, gdzie pakiet d zależy również od pakietu c. Wynik powinien odinstalować zarówno a & b, pomijanie c.

How can I do to?

Musi istnieć sposób na odinstalowanie pakietu bez pozostawiania zbędnych śmieci .

Author: Nimesh Neema, 2011-09-06

10 answers

EDIT:

Wygląda na to, że problem został rozwiązany za pomocą zewnętrznego polecenia o nazwie brew rmdeps lub brew rmtree.

Aby zainstalować i używać, wydaj następujące polecenia:

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

Zobacz powyższy link, aby uzyskać więcej informacji i dyskusji.


Oryginalna odpowiedź:

Wydaje się, że obecnie nie ma łatwego sposobu, aby to osiągnąć.

Jednakże, ja zgłosiłem problem na stronie GitHub Homebrew i ktoś zasugerował tymczasowe rozwiązanie, dopóki nie dodadzą wyłącznego polecenia, aby rozwiązać ten problem.

Istnieje zewnętrzne polecenie o nazwie brew leaves, które wypisuje wszystkie pakiety, które nie są zależnościami innych pakietów.

Jeśli zrobisz logiczne oraz na wyjściu brew leaves i brew deps <package> możesz po prostu uzyskać listę osieroconych pakietów zależności, które możesz następnie odinstalować ręcznie. Połącz to z xargs, a dostaniesz to, czego potrzebujesz, chyba (nieprzetestowane, nie licz na to).


EDIT: ktoś właśnie zaproponował bardzo podobne rozwiązanie, używając join zamiast xargs:

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

Zobacz komentarz do powyższego zagadnienia aby uzyskać więcej informacji.

 435
Author: Ory Band,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 12:20:38

brew rmtree nie działa w ogóle . Z linków na ten temat znalazłem rmrec {[5] } który faktycznie działa. Bóg wie, dlaczego brew nie ma tego jako rodzimego polecenia.

brew tap ggpeti/rmrec
brew rmrec pkgname
 38
Author: Timmmm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-16 13:59:22

Celem jest usunięcie podanego pakietu i jego zależności Bez łamania zależności innego pakietu. Używam tego polecenia:

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

Uwaga: edytowane, aby odzwierciedlić pomocny komentarz @alphadogg.

 36
Author: jfmercer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-29 23:06:45

Na podstawie odpowiedzi @jfmercer (poprawki potrzebne więcej niż komentarz).

Usuń zależności pakietu (nie usuwa pakietu):

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

Usuń pakiet:

brew remove [FORMULA]

Ponownie zainstaluj brakujące biblioteki:

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

Testowane Odinstalowywanie meld po odkryciu MeldMerge releases.

 21
Author: vault,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-19 17:33:44

Użycie tej odpowiedzi wymaga utworzenia i utrzymania pliku zawierającego nazwy pakietów, które chcesz zainstalować w systemie. Jeśli jeszcze go nie masz, użyj poniższego polecenia i usuń nazwy pakietów, których nie chcesz zachować.

brew leaves > brew_packages

Następnie możesz usunąć wszystkie zainstalowane, ale niechciane pakiety i wszelkie niepotrzebne zależności, uruchamiając następujące polecenie

brew_clean brew_packages

brew_clean jest dostępny tutaj: https://gist.github.com/cskeeters/10ff1295bca93808213d

Ten skrypt pobiera wszystkie pakiety podane w brew_packages i wszystkie ich zależności i porównuje je z wyjściem {[3] } i ostatecznie usuwa niechciane pakiety po zweryfikowaniu tej listy z użytkownikiem.

W tym momencie, jeśli chcesz usunąć pakiet a, po prostu usuń go z pliku brew_packages, a następnie uruchom ponownie brew_clean brew_packages. Usunie b, ale nie c.

 13
Author: Chad Skeeters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 21:03:00

Zapisz następujący skrypt jako 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

Teraz zainstaluj go za pomocą następującego polecenia

sudo install brew-purge /usr/local/bin

Teraz uruchom to

brew purge package

Przykład użycia 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.
$ 
 10
Author: Kevin Davies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-18 04:43:38

Bardziej Kompletna Funkcja Powłoki Bourne ' A

Istnieje już wiele dobrych odpowiedzi, ale niektóre są nieaktualne i żadna z nich nie jest całkowicie kompletna. W szczególności większość z nich usunie zależności, ale nadal pozostawia to do ciebie, aby później usunąć pierwotnie ukierunkowaną formułę. Opublikowane jednowiersze mogą być również żmudne, jeśli chcesz odinstalować więcej niż jedną formułę na raz.

Oto funkcja powłoki kompatybilna z Bourne ' em (bez znanych Bashismów) pobiera listę formuł, usuwa zależności każdej z nich, usuwa wszystkie kopie samej formuły, a następnie ponownie instaluje brakujące zależności.

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
}

Został przetestowany na Homebrew 1.7.4.

Caveats

To działa na wszystkich standardowych wzorach, które testowałem. Obecnie nie obsługuje beczek, ale nie będzie głośno narzekać, jeśli spróbujesz rozpakować beczkę o tej samej nazwie, co standardowa formuła (np. MacVim).
 5
Author: Todd A. Jacobs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-16 17:19:35

Możesz po prostu użyć do tego unixowego potoku

brew deps [FORMULA] | xargs brew rm
 4
Author: shapeshed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-12 09:53:20

Inne odpowiedzi mi nie pasowały, ale to (w fish powłoce):

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

Ponieważ brew remove $p nie działa, gdy inny pakiet zależy od p.

 3
Author: Luke Miles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-25 01:28:17

Odpowiedź @jfmercer musi być lekko zmodyfikowana, aby działać z bieżącym brewem, ponieważ wyjście brew missing zmieniło się:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
 0
Author: freytag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-22 13:34:26