У меня есть формула Homebrew, которую я хочу удалить / удалить вместе со всеми ее зависимостями, пропуская пакеты, от которых зависят другие пакеты (иначе говоря, Каскадное удаление пакетов на языке диспетчера пакетов).
Например, удалить пакет, a
который зависит от пакетов b
& c
, где пакет d
также зависит от пакета c
. Результат должен удалить оба a
& b
, пропуская c
.
Как я могу это сделать?
Должен быть способ удалить пакет, не оставляя ненужного мусора .
Ответы:
РЕДАКТИРОВАТЬ:
Похоже, что теперь проблема решена с помощью внешней команды, называемой
brew rmdeps
илиbrew rmtree
.Для установки и использования выполните следующие команды:
Смотрите ссылку выше для получения дополнительной информации и обсуждения.
Оригинальный ответ:
Похоже, что в настоящее время нет простого способа сделать это.
Тем не менее, я подал проблему на странице GitHub Homebrew , и кто-то предложил временное решение, пока они не добавят эксклюзивную команду для решения этой проблемы.
Там есть внешняя команда называется ,
brew leaves
которая печатает все пакеты, которые не являются зависимостями других пакетов.Если вы выполняете логическое и на выходе
brew leaves
иbrew deps <package>
, вы можете просто получить список потерянных пакетов зависимостей, которые впоследствии можно удалить вручную. Объедините это с,xargs
и вы получите то, что вам нужно, я думаю (не проверено, не рассчитывайте на это).РЕДАКТИРОВАТЬ: Кто-то просто предложил очень похожее решение, используя
join
вместоxargs
:См. Комментарий к проблеме, упомянутой выше, для получения дополнительной информации.
источник
This command requires a keg argument
.brew rmtree
сценарий теперь доступен в кране:brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
brew rm $(join <(brew leaves) <(brew deps FORMULA))
делает работу хорошо. Вам просто нужно запускать его снова и снова, пока все зависимости не будут удалены. Он не может удалить все сразу, потому что зависимости взаимозависимы друг с другом.&& brew install brew-rmtree
больше не нужно.Цель здесь - удалить данный пакет и его зависимости, не нарушая зависимости другого пакета. Я использую эту команду:
Примечание: отредактировано, чтобы отразить полезный комментарий @ alphadogg.
источник
--ignore-dependencies
удалить, чтобы это работало.brew rmtree
не работает вообще . Из ссылок по этому вопросу я нашел rmrec, который действительно работает. Бог знает, почемуbrew
не имеет этого как родную команду.источник
[FORMULA]
и затем использовать rmrec. правильно рекурсивно удалить все его зависимости.rmrec
что в настоящее время не очень хорошо обрабатывает пакеты с именами. Я использовал что-то, что вытянуло,linuxbrew/xorg/xorg
и он удалил все, кроме этого пакета, и даже явно назвал этот пакет, он не смог разрешить его и ничего не сделал.rmrec
это плохо. Он вообще не обрабатывает зависимости.rmtree
?rmrec
действительно обрабатывает зависимости.God knows why brew doesn't have this as a native command.
=> Потому что разработчики варки имеют плохие отношения. Они даже не позволяют людям открывать какие-либо проблемы. Проверьте github.com/Homebrew/brew , он имеет только менее чем 20 вопросов , в настоящее время. Такое небольшое количество. Это хорошая вещь? Нет, это очень плохо.Основано на ответе @jfmercer (для исправления нужно больше, чем комментарий).
Удалить зависимости пакета (не удаляет пакет):
Удалить пакет:
Переустановите отсутствующие библиотеки:
Проверено удаление
meld
после обнаружения выпусков MeldMerge .источник
Использование этого ответа требует, чтобы вы создали и поддерживали файл, содержащий имена пакетов, которые вы хотите установить в своей системе. Если у вас его еще нет, используйте следующую команду и удалите имена пакетов, которые вы не хотите оставлять установленными.
Затем вы можете удалить все установленные, но нежелательные пакеты и все ненужные зависимости, выполнив следующую команду
brew_clean
доступно здесь: https://gist.github.com/cskeeters/10ff1295bca93808213dЭтот скрипт получает все пакеты, которые вы указали в brew_packages, и все их зависимости, сравнивает их с выводом
brew list
и, наконец, удаляет нежелательные пакеты после проверки этого списка с пользователем.На этом этапе, если вы хотите удалить пакет
a
, вы просто удалите его из файла brew_packages, а затем снова запуститеbrew_clean brew_packages
. Это удалитb
, но нетc
.источник
brew clean -s
brew cleanup -s && brew cask cleanup
Вы можете просто использовать канал UNIX для этого
источник
brew missing
которая скажет вам, какую команду вам нужно запустить, чтобы получить их обратноСохраните следующий скрипт как brew-purge
Теперь установите его с помощью следующей команды
Теперь запустите
Пример использования gpg
источник
Другие ответы не сработали для меня, но это сработало (в
fish
оболочке):Потому что
brew remove $p
не удается, когда какой-то другой пакет зависит отp
.источник
Более полная функция оболочки Борна
Уже есть много хороших ответов, но некоторые устарели, и ни один из них не является полностью полным. В частности, большинство из них удалит зависимости, но все же предоставит вам возможность удалить первоначально намеченную формулу впоследствии. Размещенные однострочники также могут быть утомительными, если вы хотите удалить более одной формулы за раз.
Вот Bourne-совместимая функция оболочки (без каких-либо известных Bashisms), которая берет список формул, удаляет зависимости каждой из них, удаляет все копии самой формулы, а затем переустанавливает все отсутствующие зависимости.
Было протестировано на Homebrew 1.7.4.
Предостережения
Это работает на всех стандартных формулах, которые я тестировал. В настоящее время он не работает с бочками, но также не будет громко жаловаться, если вы попытаетесь отвинтить бочку с тем же именем, что и у стандартной формулы (например, MacVim).
источник
Ответ @jfmercer должен быть немного изменен, чтобы работать с текущим пивоварением, потому что выходные данные
brew missing
изменились:источник