Як визначити, який пакувальний пакет надає заданий файл?


12

Чи є спосіб зрозуміти, який brewпакет надає певний файл (наприклад, apt-fileв Ubuntu або pkgfileв Arch)?

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


Виявляється, що файл надається до boostтих пір, поки ви його налаштуєте --with-python. Ще було б приємно дізнатися, чи існував спосіб запитати, які файли надаються, якими файлами ...
mgalgs

FWIW це тепер передбачено boost-pythonнатомість.
Тім Сміт

Відповіді:


6

Немає. Ніщо в Homebrew не підтримує перелік файлів, дозволений або очікуваний встановлення пакету.



4

Хоча не існує інструменту, подібного до вподобання пошуку , який дозволяє знаходити загальнодоступні пакунки домашньої версії, які могли б надати файл, багато пакети вариваються на базі 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.