Ich habe ein Homebrew - Paket, das ich mit all seinen Abhängigkeiten deinstallieren/entfernen möchte, wobei Pakete übersprungen werden, von denen andere Pakete abhängen.
z.B. Deinstallieren Sie das Paket a
, das von den Paketen b
& c
abhängig ist, wobei das Paket d
auch vom Paket c
abhängt. Das Ergebnis sollte a
& b
deinstallieren und c
überspringen.
Wie kann ich das machen?
Es muss eine Möglichkeit geben, ein Paket zu deinstallieren, ohne unnötiges junk hinter sich zu lassen.
Es sieht aus wie das Problem wird jetzt mit einem externen Befehl namens brew rmdeps
oder brew rmtree
gelöst .
Geben Sie zur Installation und Verwendung die folgenden Befehle ein:
$ brew tap beeftornado/rmtree
$ brew rmtree <package>
Weitere Informationen und Diskussionen finden Sie unter dem obigen Link.
Es scheint, dass es derzeit keine einfache Möglichkeit gibt, dies zu erreichen.
Allerdings habe ich ein Problem auf Homebrews GitHub-Seite eingereicht , und jemand hat eine temporäre Lösung vorgeschlagen, bis er einen exklusiven Befehl zum Lösen dieses Problems hinzufügt.
Es gibt einen externen Befehl namens brew leaves
, der alle Pakete druckt, die keine Abhängigkeiten von anderen Paketen sind.
Wenn Sie ein logisches und für die Ausgabe von brew leaves
und brew deps <package>
ausführen, wird möglicherweise nur eine Liste der verwaisten Abhängigkeitspakete angezeigt, die Sie anschließend manuell deinstallieren können. Kombiniere das mit xargs
und du bekommst, was du brauchst, denke ich (ungeprüft, rechne nicht damit).
EDIT: Jemand hat gerade eine sehr ähnliche Lösung vorgeschlagen, join
anstelle von xargs
:
brew rm FORMULA
brew rm $(join <(brew leaves) <(brew deps FORMULA))
Siehe Kommentar zu dem oben genannten Problem für weitere Informationen.
Ziel ist es, das gegebene Paket und seine Abhängigkeiten zu entfernen ohne die Abhängigkeiten eines anderen Pakets zu brechen. Ich benutze diesen Befehl:
brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | xargs brew install
Hinweis: Bearbeitet, um den hilfreichen Kommentar von @ alphadogg wiederzugeben.
brew rmtree
funktioniert überhaupt nicht . Über die Links zu diesem Thema habe ich rmrec gefunden, was tatsächlich funktioniert. Gott weiß, warum brew
das nicht als eingeborenes Kommando hat.
brew tap ggpeti/rmrec
brew rmrec pkgname
Die Verwendung dieser Antwort erfordert, dass Sie eine Datei erstellen und verwalten, die die Paketnamen enthält, die auf Ihrem System installiert werden sollen. Wenn Sie noch keinen haben, verwenden Sie den folgenden Befehl und löschen Sie die Paketnamen, die nicht installiert bleiben sollen.
brew leaves > brew_packages
Sie können dann alle installierten, aber unerwünschten Pakete und alle nicht benötigten Abhängigkeiten entfernen, indem Sie den folgenden Befehl ausführen
brew_clean brew_packages
brew_clean
ist hier verfügbar: https://Gist.github.com/cskeeters/10ff1295bca93808213d
Dieses Skript ruft alle in brew_packages angegebenen Pakete und alle ihre Abhängigkeiten ab, vergleicht sie mit der Ausgabe von brew list
und entfernt schließlich die unerwünschten Pakete, nachdem diese Liste mit dem Benutzer überprüft wurde.
Wenn Sie an dieser Stelle das Paket a
entfernen möchten, entfernen Sie es einfach aus der brew_packages-Datei und führen Sie dann brew_clean brew_packages
erneut aus. Es entfernt b
, aber nicht c
.
Basierend auf der Antwort von @jfmercer (Korrekturen benötigten mehr als einen Kommentar).
Abhängigkeiten des Pakets entfernen (Paket wird nicht entfernt):
brew deps [FORMULA] | xargs brew remove --ignore-dependencies
Paket entfernen:
brew remove [FORMULA]
Fehlende Bibliotheken neu installieren:
brew missing | cut -d: -f2 | sort | uniq | xargs brew install
Testen der Deinstallation von meld
nach dem Erkennen von MeldMerge Releases .
Sie können dazu einfach eine UNIX-Pipe verwenden
brew deps [FORMULA] | xargs brew rm
Andere Antworten funktionierten nicht für mich, aber dies tat es (in fish
Shell):
brew remove <package>
for p in (brew deps <package>)
brew remove $p
end
Weil brew remove $p
fehlschlägt, wenn ein anderes Paket von p
abhängt.
Es gibt bereits einige gute Antworten, aber einige sind veraltet und keine davon ist vollständig. Insbesondere werden die meisten von ihnen Abhängigkeiten entfernen, es bleibt jedoch Ihnen überlassen, die ursprünglich angesprochene Formel anschließend zu entfernen. Die veröffentlichten Einzeiler können auch langwierig sein, wenn Sie mehrere Formeln gleichzeitig deinstallieren möchten.
Hier ist eine Bourne-kompatible Shell-Funktion (ohne bekannte Bashismen), die eine Liste von Formeln aufnimmt, die Abhängigkeiten der einzelnen entfernt, alle Kopien der Formel selbst entfernt und dann alle fehlenden Abhängigkeiten neu installiert.
unbrew () {
local formula
for formula in "[email protected]"; 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
}
Es wurde an Homebrew 1.7.4 getestet.
Dies funktioniert mit allen von mir getesteten Standardformeln. Es behandelt derzeit keine Fässer, beschwert sich aber auch nicht laut, wenn Sie versuchen, ein Fass mit dem gleichen Namen wie eine Standardformel (z. B. MacVim) zu lösen.
Die Antwort von @jfmercer muss leicht modifiziert werden, um mit der aktuellen Ausgabe zu arbeiten, da die Ausgabe von brew missing
geändert wurde:
brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
Speichern Sie das folgende Skript als 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
Installieren Sie es jetzt mit dem folgenden Befehl
Sudo install brew-purge /usr/local/bin
Jetzt führe es aus
brew purge package
Beispiel mit 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.
$