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

16

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

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

mgalgs
источник
Оказывается, что файл предоставляется, boostпока вы настраиваете его --with-python. Было бы неплохо узнать, есть ли способ запросить, какие файлы предоставлены какими файлами ...
mgalgs
FWIW это теперь предоставляется boost-pythonвместо.
Тим Смит

Ответы:

8

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

Тим Смит
источник
5

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

Андрей Юрчук
источник
Илиls -l $(which somecommand)
MIVK
4

В то время как не существует инструмента, подобного apt-search , который позволяет находить общедоступные пакеты homebrew, которые могли бы предоставить файл, многие пакеты 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-dev или libgoocanvas, но у него есть пакет 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

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

Нед Конц
источник
Это хорошо, но он ищет установленные пакеты. Вопрос в том, что поиск пакетов не установлен.
Бурхан Али
-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
silverdr
источник