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

mga*_*lgs 21 homebrew macos

有没有办法找出哪个brew包提供给定的文件(如apt-file在 Ubuntu 或pkgfile/pacman -F在 Arch 上)?

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

小智 10

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


Ned*_*onz 9

brew尽管没有用于搜索特定文件的内置命令,但您可以使用brew list和的组合brew list <formula>来获取答案。这需要一段时间,但是如果您正在进行一些清理并且必须多次回答此类查询,您可能会执行我有时所做的操作:按包创建文件目录:

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

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

  • 这很好,但它会搜索当前安装的软件包。问题是询问如何搜索*未*安装的软件包。 (3认同)

小智 6

如this answer中所述,您可以执行ls -l /usr/local//lib/whatever并查看符号链接指向的位置。

  • 或者 `ls -l $(which somecommand)` (4认同)

ges*_*ell 5

虽然没有像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"
}
Run Code Online (Sandbox Code Playgroud)