Как определить, какой пакет brew предоставляет данный файл?

Как определить, какой пакет brew предоставляет данный файл?

Есть ли способ выяснить, какой brewпакет предоставляет данный файл (как apt-fileв Ubuntu или pkgfile/ pacman -Fв Arch)?

Я не говорю о запросе того, какой локально установленный пакет владеет файлом в моей системе. У меня есть определенный файл, который мне нужно установить ( /usr/local/lib/libboost_python.dylibесли быть точным), и я хочу узнать, какой удаленный пакет предоставит этот файл.

решение1

Нет. Ничто в Homebrew не хранит список файлов, которые пакету разрешено или ожидается установить.

решение2

Как указано в этомотвечатьвы можете сделать это ls -l /usr/local//lib/whateverи посмотреть, куда указывает символическая ссылка.

решение3

Хотя встроенной 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

Если перенаправить вывод этого скрипта в файл, его можно использовать для поиска пакета, предоставляющего интересующий файл.

решение4

Вот однострочный текст, который есть в моем 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

Связанный контент