在 Opam 中,我如何判断哪个包拥有给定文件?

In Opam how do I tell which package owns a given file?

在 Opam 中,我如何判断哪个包拥有 ${OPAMROOT}/system 下的给定文件?如果没有直接的方法来实现这一点,是否可以列出给定包所拥有的文件?

没有这样的设施,因为 opam 允许包几乎在任何地方安装它们的文件。但总的来说结构非常简单,大多数包都尊重它:

  1. 每个安装包在 libetcdocshare 中都有自己的子文件夹。
  2. 对于每个包 opam 创建一个条目 install/<package-name>.install,如果在安装过程中使用了 opam 提供的特殊设施,该条目可能包含此包安装的文件。
  3. 二进制文件被放入 binsbin 而没有进一步细分。

以下命令列出了所有包和其中包含的文件 - 可以将输出转储到文件中进行搜索。

opam list -s | xargs -t -n 1 opam show --list-files > files.txt

(使用 opam 2.1 测试)