卸载/删除一个自制软件包,包括所有的依赖项

我有一个自制软件包,我想卸载/删除所有的依赖项,跳过其他软件包依赖的包。

例如 ,取决于软件包bc卸载软件包a ,其中软件包d也取决于软件包c 。 结果应该卸载ab ,跳过c

我怎样才能做到这一点?

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

编辑:

现在看起来问题是使用名为brew rmdepsbrew rmtree的外部命令解决的 。

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

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

请参阅上面的链接了解更多信息和讨论。


原始答案:

看来目前还没有简单的方法可以做到这一点。

但是,我在Homebrew的GitHub页面上提出了一个问题 ,有人提出了一个临时解决scheme,直到他们添加一个专有命令来解决这个问题。

有一个名为brew leaves的外部命令 ,用于打印所有不依赖于其他软件包的软件包。

如果您对brew leavesbrew deps <package>进行逻辑输出,则可能只是获取孤立的依赖包的列表,然后可以手动将其卸载。 结合xargs和你会得到你所需要的,我猜(未经testing,不要指望这个)。


编辑:有人刚刚提出了一个非常类似的解决scheme,使用join而不是xargs

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

有关更多信息,请参阅上面提到的问题的评论 。

这里的目标是删除给定的包及其依赖关系, 而不会破坏另一个包的依赖关系。 我使用这个命令:

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

注:编辑以反映@ alphadogg的有用评论。

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

 brew leaves > brew_packages 

然后,您可以通过运行以下命令来删除所有已安装但不需要的软件包和任何不必要的依赖项

 brew_clean brew_packages 

brew_clean可在这里find: https : brew_clean

此脚本获取您在brew_packages中指定的所有包及其所有依赖项,并将它们与brew list的输出进行比较,并在与用户validation此列表之后最终删除不需要的包。

此时,如果要删除程序包a ,只需将其从brew_packages文件中删除,然后重新运行brew_clean brew_packages 。 它会删除b ,但不是c

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

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

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

删除包:

 brew remove [FORMULA] 

重新安装缺less的库:

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

在发现MeldMerge发行版之后,testing卸载meld 。

brew rmtree 根本不起作用 。 从这个问题的链接,我发现rmrec实际上工作。 上帝知道为什么brew没有作为本地的命令。

 brew tap ggpeti/rmrec brew rmrec pkgname 

你可以用这个UNIXpipe道

 brew deps [FORMULA] | xargs brew rm