Bagaimana cara menentukan paket minuman mana yang menyediakan file yang diberikan?

16

Apakah ada cara untuk mengetahui brewpaket mana yang menyediakan file yang diberikan (seperti apt-filedi Ubuntu atau pkgfiledi Arch)?

Saya tidak berbicara tentang permintaan paket yang diinstal secara lokal yang memiliki file di sistem saya, saya punya file tertentu yang perlu saya instal ( /usr/local/lib/libboost_python.dyliblebih spesifik) dan ingin tahu paket jarak jauh mana yang akan menyediakan file itu.

mgalg
sumber
Ternyata file itu disediakan boostselama Anda mengkonfigurasinya --with-python. Akan tetap menyenangkan untuk mengetahui apakah ada cara untuk menanyakan file mana yang disediakan oleh file mana ...
mgalgs
FWIW ini sekarang disediakan oleh boost-pythonsebagai gantinya.
Tim Smith

Jawaban:

8

Tidak ada. Tidak ada apa pun di Homebrew yang menyimpan daftar file yang diizinkan atau diharapkan diinstal oleh suatu paket.

Tim Smith
sumber
5

Seperti yang dinyatakan dalam jawaban ini, Anda dapat melakukan ls -l /usr/local//lib/whateverdan melihat ke mana symlink menunjuk.

Andrii Yurchuk
sumber
Atauls -l $(which somecommand)
mivk
4

Meskipun tidak ada alat seperti apt-search yang memungkinkan seseorang untuk menemukan paket homebrew publik yang dapat menyediakan file, banyak paket pembuatan didasarkan pada linux atau unix counterpart. Anda dapat mencari situs web paket Debian untuk menemukan paket yang dibutuhkan.

Contoh untuk menemukan paket yang menyediakan file goocanvas.pc

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

Mengembalikan libgoocanvas-dev

brew searchtidak memiliki hasil untuk libgoocanvas-dev atau libgoocanvas tetapi tidak memiliki paket goocanvas .

Anda dapat mendefinisikan perintah ineedsebagai berikut yang akan mengembalikan daftar dari debian.org menggunakan 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"
}
gesell
sumber
0

Meskipun tidak ada brewperintah bawaan untuk mencari file tertentu, Anda bisa menggunakan kombinasi brew listdan brew list <formula>untuk mendapatkan jawabannya. Butuh beberapa saat, tetapi jika Anda melakukan pembersihan dan harus menjawab pertanyaan seperti ini lebih dari sekali, Anda mungkin melakukan apa yang kadang-kadang saya lakukan: membuat katalog file berdasarkan paket:

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

Jika Anda mengarahkan output skrip ini ke file, Anda dapat menggunakannya untuk mencari paket yang menyediakan file yang diinginkan.

Ned Konz
sumber
Ini bagus, tetapi mencari paket yang diinstal saat ini. Pertanyaannya adalah menanyakan tentang paket pencarian yang tidak diinstal.
Burhan Ali
-1

Berikut ini adalah satu-liner yang saya miliki di bindirektori saya untuk tujuan ini:

$ 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
sumber