Удалите / удалите пакет Homebrew, включая все его зависимости - PullRequest
299 голосов
/ 06 сентября 2011

У меня есть пакет Homebrew , который я хочу удалить / удалить со всеми его зависимостями, пропуская пакеты, от которых зависят другие пакеты.

например, Удалить пакет a, который зависит от пакетов b & c, где пакет d также зависит от пакета c. Результат должен удалить оба a & b, пропуская c.

Как я могу это сделать?

Должен быть способ удалить пакет, не оставляя ненужных мусор .

Ответы [ 10 ]

364 голосов
/ 07 сентября 2011

РЕДАКТИРОВАТЬ:

Похоже, проблема теперь решается с помощью внешней команды под названием brew rmdeps или brew rmtree.

Для установки и использования, выдачаследующие команды:

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

См. ссылку выше для получения дополнительной информации и обсуждения.


Оригинальный ответ:

Похоже, в настоящее время нет простого способадля этого.

Однако я подал проблему на странице GitHub Homebrew , и кто-то предложил временное решение, пока не добавят эксклюзивную команду для решения этой проблемы.

Есть внешняя команда называется brew leaves, которая печатает все пакеты, которые не являются зависимостями других пакетов.

Если вы выполняете логические и вна выходе brew leaves и brew deps <package> вы можете просто получить список потерянных пакетов зависимостей, которые впоследствии можно будет удалить вручную.Объедините это с xargs, и вы получите то, что вам нужно, я думаю (не проверено, не рассчитывайте на это).


РЕДАКТИРОВАТЬ: Кто-то просто предложил оченьаналогичное решение, использующее join вместо xargs:

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

См. комментарий к проблеме, упомянутой выше для получения дополнительной информации.

26 голосов
/ 02 мая 2015

Целью здесь является удаление данного пакета и его зависимостей без нарушения других пакетов.Я использую эту команду:

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

Примечание: отредактировано для отражения полезного комментария @ alphadogg.

19 голосов
/ 16 мая 2017

brew rmtree вообще не работает . Из ссылок по этому вопросу я нашел rmrec , который на самом деле работает. Бог знает, почему brew не имеет этого как нативную команду.

brew tap ggpeti/rmrec
brew rmrec pkgname
12 голосов
/ 06 июня 2014

Для использования этого ответа необходимо создать и поддерживать файл, содержащий имена пакетов, которые вы хотите установить в своей системе. Если у вас его еще нет, используйте следующую команду и удалите имена пакетов, которые вы не хотите сохранять установленными.

brew leaves > brew_packages

Затем вы можете удалить все установленные, но нежелательные пакеты и все ненужные зависимости, выполнив следующую команду

brew_clean brew_packages

brew_clean доступно здесь: https://gist.github.com/cskeeters/10ff1295bca93808213d

Этот скрипт получает все пакеты, которые вы указали в brew_packages, и все их зависимости и сравнивает их с выводом brew list и, наконец, удаляет нежелательные пакеты после проверки этого списка с пользователем.

На этом этапе, если вы хотите удалить пакет a, вы просто удаляете его из файла brew_packages, а затем снова запускаете brew_clean brew_packages. Это удалит b, но не c.

10 голосов
/ 19 января 2017

Основано на ответе @jfmercer (для исправлений нужно больше, чем комментарий).

Удалить зависимости пакета (не удаляет пакет):

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

Удалить пакет:

brew remove [FORMULA]

Переустановите отсутствующие библиотеки:

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

Проверено удаление meld после обнаружения MeldMerge выпускает .

4 голосов
/ 12 марта 2013

Вы можете просто использовать UNIX-канал для этого

brew deps [FORMULA] | xargs brew rm
2 голосов
/ 16 сентября 2018

Более полная функция 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).

2 голосов
/ 25 мая 2018

Другие ответы у меня не сработали, но это сработало (в fish shell):

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

Поскольку brew remove $p завершается неудачно, когда какой-то другой пакет зависит от p.

0 голосов
/ 18 февраля 2019

Сохранить следующий скрипт как 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.
$ 
0 голосов
/ 22 августа 2018

Ответ @jfmercer должен быть немного изменен, чтобы работать с текущим напитком, поскольку изменилось значение brew missing:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
...