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.

mgalgs
fonte
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.

Tim Smith
fonte
5

Conforme indicado nesta resposta, você pode fazer ls -l /usr/local//lib/whatevere ver para onde o link simbólico aponta.

Andrii Yurchuk
fonte
Ouls -l $(which somecommand)
mivk 24/09
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"
}
Gesell
fonte
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.

Ned Konz
fonte
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
silverdr
fonte