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.


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.


5

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


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"
}

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.