11

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

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

5 ответов5

5

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

4

В то время как не существует инструмента, подобного apt-search , который позволяет находить общедоступные пакеты homebrew, которые могли бы предоставить файл, многие пакеты brew основаны на аналогах linux или unix. Вы можете выполнить поиск на сайте пакета Debian, чтобы найти нужный пакет.

Пример поиска пакета с файлом goocanvas.pc

https://packages.debian.org/search?suite=default&section=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"
}
3

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .