如何重新安装使用 Homebrew 安装的所有软件包?

如何重新安装使用 Homebrew 安装的所有软件包?

我最近遇到一个问题,我的所有链接二进制文件都从 中删除了/usr/local/bin/。幸运的是,其中大多数只是使用 Homebrew 安装的二进制文件的动态链接,因此在重新安装 Homebrew 后,我需要将它们恢复。有没有办法强制使用 Homebrew 重新安装所有已安装的软件包和二进制文件?也许将 的输出通过管道传输brew listbrew reinstall

答案1

就这么简单:

$ brew list | xargs brew reinstall

您不需要卸载任何东西,因为这样做可能会丢失您的设置和配置。

答案2

不仅可以保留已安装的 brews,还可以水龙头我建议

$ brew bundle dump --describe --global
$ brew bundle install --global

第一个命令将写入~/.Brewfile,并在第二个调用中再次读取。它看起来像这样:

$ cat ~/.Brewfile
tap "buo/cask-upgrade"
tap "homebrew/cask-fonts"
brew "direnv"
brew "python"
cask "0xed"
cask "alacritty"

请发出

$ brew bundle -h

为了更多细节bundle命令上。

答案3

升级到 OSX High Sierra 后,我遇到了这个需求。大多数 brew 包都因缺少 dylib 而失败。最后我编写了一个快速而粗糙的脚本,可以一次干净地删除和替换一个,忽略依赖项,这样您就不会强制批量清除。您需要修复每个停止点,但它会从停止的地方继续,所以不会太痛苦。

一如既往,YMMV

#!/bin/bash -e
if [ "$1" == "-h" ] ; then
    cat <<EOT
    Remove & reinstall all brew owned packages
    Fail on error to allow manual fixing
    Accept package name as arg1 to spec pick up point.
        $0 [<pickup point>]
    eg:
        $0
    or
        $0 ctags
            where <ctags> is the package to start from
EOT
    exit 1
fi

for l in $(brew list) ; do
    if [ "$1" ] ; then
        if [[ $l < $1 ]] ; then
            echo "skipping $l"
            continue
        fi
    fi
    echo "Remove $l"
    brew uninstall --ignore-dependencies $l 
    echo "Re-add $l"
    brew install $l
done

答案4

就像是

cd /tmp
brew list -1 >brew-list
# do whatever is necessary to remove packages
while read package; do
    brew install $package
done <brew-list

应该可以解决问题(除非您已经从水龙头安装,那么可能还需要做更多的工作)。

相关内容