如何在Brew中找到已安装文件的包?

问题描述 投票:0回答:8

如何在 Homebrew 中识别给定文件的包/公式,或包所拥有的所有文件的列表?

bash homebrew
8个回答
109
投票

查看包中的所有文件:

brew ls <package>

要查找文件的包,请像这样查看该文件:

ls -l /usr/local/bin/whatever

如果它是由 Homebrew 安装的,它将是一个到

/usr/local/Cellar/something
的符号链接,这样就会告诉你它来自哪个包。


11
投票

刚刚编写了这个脏函数来获取文件所属的brew包名称:

function brew_find_pkg {
    file_to_search="$@"

    for package in $(brew list); do
        brew ls $package | grep -E -q "/${file_to_search}$"
        if [ $? -eq 0 ]; then
            echo $package
            break
        fi
    done
}

只需在终端中输入即可。然后find找到一个文件所属的brew包,说文件

gsed
,就调用这样的函数

brew_find_pkg gsed

请注意,如果您提供文件的完整路径,该功能将不起作用。


6
投票

可以根据指向二进制文件的符号链接(

Cellar/PACKAGE/...
)来确定包名称,例如

$ ls -la $(which awk) # => gawk
lrwxr-xr-x 1 kenorb 28 May 20  2015 /usr/local/bin/awk -> ../Cellar/gawk/4.1.1/bin/awk

$ ls -la $(which seq) # => coreutils
lrwxr-xr-x 1 kenorb 14 Apr  8  2015 /usr/local/opt/coreutils/libexec/gnubin/seq -> ../../bin/gseq

2
投票

此功能适用于存储在

$( brew --prefix )/bin
目录中的命令。

function brew_find_pkg {

    cmds_to_search="$@"
    brew_bin=$( brew --prefix )/bin

    for cmd in $cmd_to_search ; do

        if [ -L $brew_bin/$cmd ] ; then
            \ls -l $brew_bin/$cmd |cut -f 2 -d '>'
        else
            echo "$cmd is not a brew command"
        fi
    done
}

例如:

$ brew_find_pkg gawk gcc alskdfja
 ../Cellar/gawk/4.1.4_1/bin/gawk
 ../Cellar/gcc/5.3.0/bin/gcc
alskdfja is not a brew command

1
投票

查找并酿造前缀,(例如对于 opencv):

find `brew --prefix opencv3`/ -exec ls -l {} \;

(请注意明智地使用 -exec,并且永远不要忘记那些 \;'s,伙计们 .. find 如何知道 -exec arg-list 已完成..)


1
投票

Homebrew 软件包安装到 $(brew --prefix)/Cellar (通常是 /usr/local/Cellar)。

要找出文件属于哪些包,一种简单的方法是:

$ find $(brew --prefix)/Cellar/ | grep somefilename

1
投票

我为它做了一个自制水龙头。

安装

% brew tap ten0s/brew-cache

构建/更新缓存

% brew cache -u
Building cache: fcbb2f2ca6958fa9218c035e8cfef96cd6e92164
Cache: fcbb2f2ca6958fa9218c035e8cfef96cd6e92164 is built

搜索

% brew cache -s 'lib/libgtk-3.dylib'
gtk+3 3.24.35

请参阅https://github.com/ten0s/homebrew-brew-cache了解更多详细信息`


0
投票

我不喜欢这里的任何其他答案,因为它们不是自我记录的。一般来说,它所在的包位于地窖路径中,因此只需运行如下示例所示的代码:

$ ll $(which benchmark_xl)          
lrwxr-xr-x  1 slu  admin    42B Oct  9 14:07 /opt/homebrew/bin/benchmark_xl -> ../Cellar/jpeg-xl/0.8.2_1/bin/benchmark_xl
© www.soinside.com 2019 - 2024. All rights reserved.