如何确定哪个Brew软件包提供给定文件?


16

有没有办法找出哪个brew软件包提供了给定的文件(例如apt-file在Ubuntu或pkgfileArch上)?

我不是在谈论查询哪个本地安装的软件包在我的系统上拥有一个文件,我有一个需要安装的特定文件(/usr/local/lib/libboost_python.dylib具体来说),并且想知道哪个远程软件包将提供该文件。


事实证明,boost只要您使用进行配置,就会提供该文件--with-python。仍然很高兴知道是否有一种方法可以查询哪些文件由哪些文件提供...
mgalgs 2014年

FWIW现在boost-python改为提供。
蒂姆·史密斯

Answers:


8

那没有。Homebrew中的任何内容都不会维护允许或预期安装软件包的文件列表。



4

尽管没有像apt-search这样的工具可以让人们找到可以提供文件的公共自制软件包,但许多brew软件包都是基于linux或unix的。您可以搜索Debian软件包网站以找到所需的软件包。

查找提供文件goocanvas.pc的软件包的示例

https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=contents&keywords=goocanvas.pc

返回libgoocanvas-dev

brew search没有libgoocanvas-devlibgoocanvas的结果,但确实有goocanvas软件包。

您可以使用以下命令定义ineed如下命令,该命令将从debian.org返回列表ineed goocanvas.pc

ineed() {
echo -en $(echo \
    $(curl -s "https://packages.debian.org/search?suite=default&section=all&arch=any&searchon=contents&keywords=$1") \
       | sed 's%</*tr>%\\n%g') \
    | grep 'class="file"' \
    | sed 's/<[^>]*>//g' \
    | column -t \
    | grep --color -i -w "$1"
}

0

虽然没有内置的brew命令来搜索特定的文件,你可以使用的组合brew list,并brew list <formula>得到答案。这需要一段时间,但是如果您要进行一些清理,并且不得不多次回答此类查询,那么您有时可能会做我所做的事情:按包创建文件目录:

#!/bin/sh
# make a catalog of Homebrew-installed packages by package
brew list |\
  while read formula; do
    brew list $formula |\
    while read file; do
      echo -e "$formula\t$file" # need -e to expand \t
    done
done

如果将此脚本的输出重定向到文件,则可以使用它搜索提供感兴趣文件的软件包。


很好,但是它会搜索当前安装的软件包。问题是询问是否搜索安装的软件包。
Burhan Ali,

-1

这是我在bin目录中为达到此目的而设置的单行代码:

$ cat ~/bin/brewpkg

#!/bin/bash
which -s $1 ; if [ $? -eq 0 ] ; then ls -lF `which $1` | sed -n 's/^.*\/Cellar\/\([^\/]\{1,\}\)\/.*$/\1/ p' ; fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.