63

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

4

6 回答 6

101

要查看包中的所有文件:

brew ls <package>

要查找文件的包,请查看该文件,如下所示:

ls -l /usr/local/bin/whatever

如果它是由 Homebrew 安装的,它将是一个指向 的符号链接/usr/local/Cellar/something,这样就会告诉你它来自哪个包。

于 2013-11-18T05:04:04.730 回答
7

刚刚编写了这个脏函数来获取文件所属的 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
}

只需在终端中输入即可。然后找找一个文件所属的brew包,说文件gsed,就这样调用函数

brew_find_pkg gsed

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

于 2016-04-14T12:18:43.057 回答
3

包名可以根据指向二进制文件 ( 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
于 2016-04-06T20:31:50.633 回答
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
于 2017-09-29T19:04:43.943 回答
1

查找和 brew 前缀,(例如对于 opencv):

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

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

于 2017-04-19T18:30:45.463 回答
0

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

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

$ find $(brew --prefix)/Cellar/ | grep somefilename
于 2018-03-29T17:49:48.147 回答