我有一个Homebrew公式,我希望卸载/删除及其所有依赖项,跳过其他包所依赖的包(在包管理器中称为级联包删除)。
例如,卸载依赖于包b和c的包a,其中包d也依赖于包c。结果应该卸载a和b,跳过c。
我该怎么做呢?
必须有一种方法来卸载一个包而不留下不必要的垃圾。
我有一个Homebrew公式,我希望卸载/删除及其所有依赖项,跳过其他包所依赖的包(在包管理器中称为级联包删除)。
例如,卸载依赖于包b和c的包a,其中包d也依赖于包c。结果应该卸载a和b,跳过c。
我该怎么做呢?
必须有一种方法来卸载一个包而不留下不必要的垃圾。
当前回答
酿造rmtree根本不能工作。从这个问题的链接中,我发现了rmrec,它实际上是有效的。天知道为什么brew没有这样的原生命令。
brew tap ggpeti/rmrec
brew rmrec pkgname
其他回答
@jfmercer的答案必须稍微修改一下才能使用当前的brew,因为缺少brew的输出已经改变:
brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install
稍微精致;可提供多个包装;没有供应时有使用。
#!/bin/bash
# Removes the package and all dependancies.
if [ $# -eq 0 ]; then
echo "$(basename $0) <pkg> [<pkg> [...]]"
exit 1
fi
function tree() {
pkg="$1"
join <(brew leaves) <(sort <(brew deps ${pkg}; echo ${pkg}))
}
let e=0
for pkg in "$@"; do
printf "Purging %s and its dependencies...\n" "${pkg}"
deps=( $(tree ${pkg}) )
while (( ${#deps[@]} > 0 )); do
brew rm "${deps[@]}"
deps=( $(tree ${pkg}) )
done
done
其他答案对我来说都不管用,但这个答案(用鱼壳)管用:
brew remove <package>
for p in (brew deps <package>)
brew remove $p
end
因为当其他包依赖于p时,brew remove $p失败。
酿造rmtree根本不能工作。从这个问题的链接中,我发现了rmrec,它实际上是有效的。天知道为什么brew没有这样的原生命令。
brew tap ggpeti/rmrec
brew rmrec pkgname
基于@jfmercer的回答(更正需要的不仅仅是评论)。
删除包的依赖项(不删除包):
brew deps [FORMULA] | xargs brew remove --ignore-dependencies
删除包:
brew remove [FORMULA]
重新安装丢失的库:
brew missing | cut -d: -f2 | sort | uniq | xargs brew install
在发现MeldMerge发布后测试卸载meld。