Como determinar qual pacote de fermentação fornece um determinado arquivo?


16

Existe uma maneira de descobrir qual brewpacote fornece um determinado arquivo (como apt-fileno Ubuntu ou pkgfileno Arch)?

Não estou falando sobre consultar qual pacote instalado localmente possui um arquivo no meu sistema, tenho um arquivo específico que preciso instalar ( /usr/local/lib/libboost_python.dylibpara ser específico) e quero saber qual pacote remoto forneceria esse arquivo.


Acontece que esse arquivo é fornecido boostdesde que você o configure --with-python. Ainda seria bom saber se havia uma maneira de consulta que arquivos são fornecidos por quais arquivos ...
mgalgs

Agora, isso é fornecido pelo FWIW boost-python.
Tim Smith

Respostas:


8

Não há. Nada no Homebrew mantém uma lista de arquivos que um pacote tem permissão ou espera instalar.



4

Embora não exista uma ferramenta apt-search like que permita encontrar pacotes homebrew públicos que possam fornecer um arquivo, muitos pacotes brew são baseados em uma contrapartida linux ou unix. Você pode pesquisar no site do pacote Debian para encontrar o pacote necessário.

Exemplo para encontrar o pacote que fornece o arquivo goocanvas.pc

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

Retorna libgoocanvas-dev

brew searchnão possui resultados para libgoocanvas-dev ou libgoocanvas, mas possui um pacote goocanvas .

Você pode definir um comando da ineedseguinte maneira que retornaria uma lista do debian.org usando 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

Embora não exista um brewcomando interno para procurar um arquivo específico, você pode usar uma combinação de brew liste brew list <formula>obter a resposta. Demora um pouco, mas se você estiver fazendo uma limpeza e precisar responder a esse tipo de consulta mais de uma vez, faça o que fiz algumas vezes: faça um catálogo de arquivos por pacote:

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

Se você redirecionar a saída desse script para um arquivo, poderá usá-lo para procurar o pacote que fornece o arquivo de interesse.


Isso é bom, mas ele procura pacotes atualmente instalados. A pergunta é sobre a busca de pacotes não instalados.
Burhan Ali

-1

Aqui está o one-liner que tenho no meu bindiretório exatamente para esse fim:

$ cat ~/bin/brewpkg

#!/bin/bash
which -s $1 ; if [ $? -eq 0 ] ; then ls -lF `which $1` | sed -n 's/^.*\/Cellar\/\([^\/]\{1,\}\)\/.*$/\1/ p' ; fi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.