Làm thế nào để xác định gói bia nào cung cấp một tập tin nhất định?


16

Có cách nào để tìm ra brewgói nào cung cấp một tệp nhất định (như apt-filetrên Ubuntu hoặc pkgfiletrên Arch) không?

Tôi không nói về việc truy vấn gói cài đặt cục bộ nào sở hữu một tệp trên hệ thống của tôi, tôi có một tệp cụ thể mà tôi cần cài đặt ( /usr/local/lib/libboost_python.dylibcụ thể) và muốn biết gói từ xa nào sẽ cung cấp tệp đó.


Hóa ra tập tin đó được cung cấp boostmiễn là bạn cấu hình nó --with-python. Sẽ vẫn rất tốt nếu biết có cách nào để truy vấn tệp nào được cung cấp bởi tệp nào ...
mgasms

FWIW này hiện được cung cấp boost-pythonthay thế.
Tim Smith

Câu trả lời:


8

Không có. Không có gì trong Homebrew duy trì một danh sách các tệp mà gói được cho phép hoặc dự kiến ​​sẽ cài đặt.


5

Như đã nêu trong câu trả lời này, bạn có thể làm ls -l /usr/local//lib/whatevervà xem nơi liên kết tượng trưng đến.


Hoặcls -l $(which somecommand)
mivk

4

Mặc dù không có công cụ tìm kiếm apt như công cụ cho phép người ta tìm các gói homebrew công khai có thể cung cấp một tệp, nhiều gói sản xuất bia dựa trên bản sao linux hoặc unix. Bạn có thể tìm kiếm trang web gói Debian để tìm gói cần thiết.

Ví dụ để tìm gói cung cấp tệp goocanvas.pc

https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=contents&keywords=goocanvas.pc

Trả về libgoocanvas-dev

brew searchkhông có kết quả cho libgoocanvas-dev hoặc libgoocanvas nhưng nó có gói goocanvas .

Bạn có thể định nghĩa một lệnh ineednhư sau sẽ trả về một danh sách từ debian.org bằng cách sử dụng 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

Mặc dù không có brewlệnh tích hợp để tìm kiếm một tệp cụ thể, bạn có thể sử dụng kết hợp brew listbrew list <formula>để có câu trả lời. Sẽ mất một lúc, nhưng nếu bạn đang thực hiện một số dọn dẹp và phải trả lời loại truy vấn này nhiều lần, bạn có thể làm những gì tôi đã làm đôi khi: tạo một danh mục các tệp theo gói:

#!/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

Nếu bạn chuyển hướng đầu ra của tập lệnh này sang một tệp, bạn có thể sử dụng nó để tìm kiếm gói cung cấp tệp quan tâm.


Điều này là tốt, nhưng nó tìm kiếm các gói hiện đang cài đặt. Câu hỏi là hỏi về các gói tìm kiếm không được cài đặt.
Burhan Ali

-1

Đây là một lớp lót tôi có trong binthư mục của mình cho chính xác mục đích này:

$ cat ~/bin/brewpkg

#!/bin/bash
which -s $1 ; if [ $? -eq 0 ] ; then ls -lF `which $1` | sed -n 's/^.*\/Cellar\/\([^\/]\{1,\}\)\/.*$/\1/ p' ; fi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.