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

时间:2013-11-11 20:52:11

标签: homebrew

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

6 个答案:

答案 0 :(得分:69)

要查看包中的所有文件:

brew ls <package>

要查找文件包,请查看以下文件:

ls -l /usr/local/bin/whatever

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

答案 1 :(得分:6)

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

function brew_find_pkg {
    file_to_search="$@"
    list_of_brew_pkgs=$(brew list)

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

只需在终端输入即可。然后找到一个文件所属的brew包,比如文件pcregrep,只需调用这个函数

brew_find_pkg pcregrep

请注意,如果您提供文件的完整路径,则该功能将无效。

答案 2 :(得分:2)

可以根据指向二进制(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

答案 3 :(得分: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

答案 4 :(得分:1)

查找并刷新前缀(例如,对于opencv):

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

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

答案 5 :(得分:0)

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

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

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