Comment déterminer quel paquet d'infusion fournit un fichier donné?

16

Existe-t-il un moyen de déterminer quel brewpackage fournit un fichier donné (comme apt-filesur Ubuntu ou pkgfilesur Arch)?

Je ne parle pas de savoir quel package installé localement possède un fichier sur mon système, j'ai un fichier particulier que j'ai besoin d'installer ( /usr/local/lib/libboost_python.dylibpour être spécifique) et je veux savoir quel package distant fournirait ce fichier.

mgalgs
la source
Il s'avère que ce fichier est fourni boosttant que vous le configurez avec --with-python. Ce serait quand même bien de savoir s'il y avait un moyen d'interroger quels fichiers sont fournis par quels fichiers ...
mgalgs
FWIW ceci est maintenant fourni par à la boost-pythonplace.
Tim Smith

Réponses:

8

Il n'y a pas. Rien dans Homebrew ne conserve une liste de fichiers qu'un package est autorisé ou prévu d'installer.

Tim Smith
la source
5

Comme indiqué dans cette réponse, vous pouvez faire ls -l /usr/local//lib/whateveret voir où pointe le lien symbolique.

Andrii Yurchuk
la source
Ouls -l $(which somecommand)
mivk
4

Bien qu'il n'y ait pas d' outil de recherche d'apt qui permette de trouver des packages homebrew publics qui pourraient fournir un fichier, de nombreux packages de brassage sont basés sur un équivalent Linux ou Unix. Vous pouvez rechercher le site Web du paquet Debian pour trouver le paquet nécessaire.

Exemple de recherche d'un package qui fournit le fichier goocanvas.pc

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

Renvoie libgoocanvas-dev

brew searchn'a aucun résultat pour libgoocanvas-dev ou libgoocanvas mais il a un paquet goocanvas .

Vous pouvez définir une commande ineedcomme suit qui retournerait une liste de debian.org en utilisant 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
la source
0

Bien qu'il n'y ait pas de brewcommande intégrée pour rechercher un fichier spécifique, vous pouvez utiliser une combinaison de brew listet brew list <formula>pour obtenir la réponse. Cela prend un certain temps, mais si vous effectuez un nettoyage et devez répondre à ce type de requête plus d'une fois, vous pouvez faire ce que j'ai fait parfois: créer un catalogue de fichiers par package:

#!/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 vous redirigez la sortie de ce script vers un fichier, vous pouvez l'utiliser pour rechercher le package qui fournit le fichier qui vous intéresse.

Ned Konz
la source
C'est bien, mais il recherche les packages actuellement installés. La question porte sur la recherche de packages non installés.
Burhan Ali
-1

Voici le one-liner que j'ai dans mon binannuaire exactement à cette fin:

$ 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
la source