Wie kann festgestellt werden, welches Brühpaket eine bestimmte Datei enthält?

16

Gibt es eine Möglichkeit herauszufinden, welches brewPaket eine bestimmte Datei enthält (wie apt-fileunter Ubuntu oder pkgfileArch)?

Ich spreche nicht von der Abfrage, welches lokal installierte Paket eine Datei auf meinem System besitzt. Ich habe eine bestimmte Datei, die ich installieren muss ( /usr/local/lib/libboost_python.dylibum genau zu sein), und möchte wissen, welches Remote-Paket diese Datei bereitstellen würde.

mgalgs
quelle
Es stellt sich heraus, dass die Datei bereitgestellt wird boost, solange Sie sie mit konfigurieren --with-python. Wäre immer noch schön zu wissen, ob es eine Möglichkeit gibt, abzufragen, welche Dateien von welchen Dateien bereitgestellt werden ...
mgalgs
FWIW wird dies jetzt boost-pythonstattdessen bereitgestellt .
Tim Smith

Antworten:

8

Da ist nicht. Nichts in Homebrew verwaltet eine Liste von Dateien, die ein Paket installieren darf oder soll.

Tim Smith
quelle
5

Wie in dieser Antwort angegeben , können Sie ls -l /usr/local//lib/whateversehen, wohin der Symlink zeigt.

Andrii Yurchuk
quelle
Oderls -l $(which somecommand)
Mivk
4

Während es kein apt-search- ähnliches Tool gibt, mit dem man öffentliche Homebrew-Pakete finden kann, die eine Datei bereitstellen könnten, basieren viele Brew-Pakete auf einem Linux- oder Unix-Gegenstück. Sie können die Debian-Paket-Website durchsuchen, um das benötigte Paket zu finden.

Beispiel für die Suche nach einem Paket mit der Datei goocanvas.pc

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

Gibt libgoocanvas-dev zurück

brew searchhat keine Ergebnisse für libgoocanvas-dev oder libgoocanvas, aber es hat ein goocanvas- Paket.

Sie können einen Befehl ineedwie folgt definieren, der eine Liste von debian.org zurückgibt, indem Sie 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
quelle
0

Obwohl es keinen integrierten brewBefehl zum Suchen nach einer bestimmten Datei gibt, können Sie eine Kombination aus brew listund verwenden brew list <formula>, um die Antwort zu erhalten. Es dauert eine Weile, aber wenn Sie eine Bereinigung durchführen und diese Art von Abfrage mehrmals beantworten müssen, können Sie das tun, was ich manchmal getan habe: Erstellen Sie einen Katalog von Dateien nach 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

Wenn Sie die Ausgabe dieses Skripts in eine Datei umleiten, können Sie damit nach dem Paket suchen, das die gewünschte Datei bereitstellt.

Ned Konz
quelle
Dies ist gut, durchsucht jedoch aktuell installierte Pakete. Die Frage bezieht sich auf die Suche nach nicht installierten Paketen .
Burhan Ali
-1

Hier ist der Einzeiler, den ich bingenau zu diesem Zweck in meinem Verzeichnis habe:

$ cat ~/bin/brewpkg

#!/bin/bash
which -s $1 ; if [ $? -eq 0 ] ; then ls -lF `which $1` | sed -n 's/^.*\/Cellar\/\([^\/]\{1,\}\)\/.*$/\1/ p' ; fi
Silberdr
quelle