卸载/删除Homebrew包,包括其所有依赖项

时间:2011-09-06 16:38:25

标签: macos homebrew

我有一个 Homebrew 程序包,我希望卸载/删除所有依赖项,跳过其他程序包所依赖的程序包。

例如卸载程序包a,这取决于程序包b& c,其中包d也取决于包c。结果应该同时卸载a& b,跳过c

我该怎么做?

必须有一种卸载软件包的方法,而不会留下不必要的垃圾

11 个答案:

答案 0 :(得分:358)

编辑:

看起来像the issue is now solved using an external command called brew rmdeps or brew rmtree

要安装和使用,请发出以下命令:

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

有关更多信息和讨论,请参阅上述链接。


原始答案:

目前似乎没有简单的方法来实现这一目标。

然而,我filed an issue on Homebrew's GitHub page,有人建议临时解决方案,直到他们添加一个独占命令来解决这个问题。

external command名为brew leaves,它打印所有与其他软件包无关的软件包。

如果对brew leavesbrew deps <package>的输出执行逻辑 ,您可能只会获得孤立依赖包的列表,之后您可以手动卸载。将此与xargs相结合,你会得到你需要的东西,我想(未经测试,不要依赖于此)。


编辑:有人提出了一个非常类似的解决方案,使用join代替xargs

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

有关详细信息,请参阅comment on the issue mentioned above

答案 1 :(得分:55)

到 2020 年底,Homebrew 团队添加了一个简单的命令 brew uninstall <package> 来删除所有未使用的依赖项。

首先,卸载软件包:

brew autoremove

然后,删除所有未使用的依赖项:

{{1}}

答案 2 :(得分:18)

brew rmtree doesn't work at all。从该问题的链接中我发现rmrec实际上可以正常工作。上帝知道为什么brew没有这个作为本地命令。

brew tap ggpeti/rmrec
brew rmrec pkgname

答案 3 :(得分:12)

使用此答案要求您创建并维护一个包含要在系统上安装的软件包名称的文件。如果您还没有,请使用以下命令并删除您不想继续安装的软件包名称。

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

答案 4 :(得分:10)

基于@jfmercer答案(更正需要的不仅仅是评论)。

删除软件包的依赖项(不删除软件包):

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

删除包裹:

brew remove [FORMULA]

重新安装缺少的库:

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

在发现MeldMerge releases后测试卸载meld

答案 5 :(得分:4)

您可以使用UNIX管道进行此

brew deps [FORMULA] | xargs brew rm

答案 6 :(得分:2)

其他答案对我不起作用,但这样做(在fish shell中):

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

因为brew remove $p因某些其他包依赖于p而失败。

答案 7 :(得分:2)

更完备的伯恩壳函数

已经有很多好的答案,但是有些已经过时了,没有一个是完整的。特别是,它们中的大多数将删除依赖项,但仍然由您自己决定,以便随后删除最初定位的公式。如果您想一次卸载多个公式,则发布的单行代码也可能很乏味。

这是一个与Bourne兼容的shell函数(没有任何已知的Bashism),它获取一个公式列表,删除每个依赖关系,删除公式本身的所有副本,然后重新安装所有缺少的依赖关系。

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)同名的木桶,也不会大声抱怨。

答案 8 :(得分:0)

@jfmercer的答案必须稍作修改以使用当前的brew,因为brew missing的输出已更改:

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

答案 9 :(得分:0)

将以下脚本另存为酿造

#!/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.
$ 

答案 10 :(得分:0)

略精致;可提供多包;没有提供时有使用。

import { fromEvent } from "rxjs";
import { map } from "rxjs/operators";


function calculatePercentange(element: Element) {
    const { scrollTop, scrollHeight, clientHeight } = element;
    console.log(scrollTop);
    // return (scrollTop / (scrollHeight - clientHeight)) * 100;
}

const scroll$ = fromEvent<Document>(document, "scroll");

const percentage = scroll$
    .pipe(map(
        (elem) => calculatePercentange(elem.scrollingElement)))
    .subscribe(console.log);