¿Cómo determinar qué paquete de preparación proporciona un archivo determinado?

16

¿Hay alguna manera de averiguar qué brewpaquete proporciona un archivo determinado (como apt-fileen Ubuntu o pkgfileen Arch)?

No estoy hablando de preguntar qué paquete instalado localmente posee un archivo en mi sistema, tengo un archivo en particular que necesito instalado ( /usr/local/lib/libboost_python.dylibpara ser específico) y quiero saber qué paquete remoto proporcionaría ese archivo.

mgalgs
fuente
Resulta que el archivo se proporciona boostsiempre que lo configure --with-python. Todavía sería bueno saber si había una manera de consulta que proporciona archivos de archivos que ...
mgalgs
FWIW esto ahora es proporcionado por en su boost-pythonlugar.
Tim Smith

Respuestas:

8

No hay. Nada en Homebrew mantiene una lista de archivos que se permite o se espera que un paquete instale.

Tim Smith
fuente
5

Como se indica en esta respuesta , puede hacer ls -l /usr/local//lib/whatevery ver a dónde apunta el enlace simbólico.

Andrii Yurchuk
fuente
O bienls -l $(which somecommand)
mivk
4

Si bien no existe una herramienta similar a apt-search que le permita a uno encontrar paquetes homebrew públicos que puedan proporcionar un archivo, muchos paquetes brew se basan en una contraparte de Linux o Unix. Puede buscar en el sitio web del paquete Debian para encontrar el paquete necesario.

Ejemplo para encontrar el paquete que proporciona el archivo goocanvas.pc

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

Devuelve libgoocanvas-dev

brew searchno tiene resultados para libgoocanvas-dev o libgoocanvas pero tiene un paquete goocanvas .

Puede definir un comando de la ineedsiguiente manera que devolvería una lista de 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
fuente
0

Aunque no hay un brewcomando incorporado para buscar un archivo específico, puede usar una combinación de brew listy brew list <formula>para obtener la respuesta. Lleva un tiempo, pero si está haciendo una limpieza y tiene que responder este tipo de consulta más de una vez, puede hacer lo que he hecho a veces: hacer un catálogo de archivos por paquete:

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

Si redirige la salida de este script a un archivo, puede usarlo para buscar el paquete que proporciona el archivo de interés.

Ned Konz
fuente
Esto es bueno, pero busca los paquetes instalados actualmente. La pregunta es acerca de buscar paquetes no instalados.
Burhan Ali
-1

Aquí está la línea que tengo en mi bindirectorio para exactamente este propósito:

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