Jak ustalić, który pakiet parzenia zawiera dany plik?

16

Czy istnieje sposób, aby dowiedzieć się, który brewpakiet zawiera dany plik (jak apt-filena Ubuntu lub pkgfileArch)?

Nie mówię o zapytaniu, który pakiet zainstalowany lokalnie jest właścicielem pliku w moim systemie, mam konkretny plik, który muszę zainstalować ( /usr/local/lib/libboost_python.dyliba konkretnie) i chcę wiedzieć, który pakiet zdalny dostarczy ten plik.

mgalgs
źródło
Okazuje się, że plik jest dostarczany boosttak długo, jak go skonfigurujesz --with-python. Nadal byłoby miło wiedzieć, czy istnieje sposób na zapytania, które pliki są świadczone przez które pliki ...
mgalgs
FWIW jest to teraz udostępniane przez boost-python.
Tim Smith

Odpowiedzi:

8

Tam nie ma. Nic w Homebrew nie utrzymuje listy plików, które pakiet może zainstalować lub powinien zainstalować.

Tim Smith
źródło
4

Jak stwierdzono w tej odpowiedzi , możesz zrobić ls -l /usr/local//lib/whateveri zobaczyć, gdzie wskazuje dowiązanie symboliczne.

Andrii Yurchuk
źródło
Lubls -l $(which somecommand)
mivk
4

Chociaż nie ma narzędzia typu apt-search , które pozwala znaleźć publiczne pakiety homebrew, które mogłyby dostarczyć plik, wiele pakietów brew jest opartych na Linuksie lub Uniksie. Możesz przeszukać stronę pakietów Debiana, aby znaleźć potrzebny pakiet.

Przykład znalezienia pakietu zawierającego plik goocanvas.pc

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

Zwraca libgoocanvas-dev

brew searchnie ma wyników dla libgoocanvas-dev lub libgoocanvas, ale ma pakiet goocanvas .

Możesz zdefiniować polecenie ineedw następujący sposób, które zwróci listę z debian.org, używając 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
źródło
0

Chociaż nie ma wbudowanego brewpolecenia do wyszukiwania określonego pliku, możesz użyć kombinacji brew listi, brew list <formula>aby uzyskać odpowiedź. To zajmuje trochę czasu, ale jeśli robisz porządki i musisz odpowiedzieć na tego rodzaju zapytanie więcej niż raz, możesz zrobić to, co ja czasami zrobiłem: utwórz katalog plików według pakietu:

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

Jeśli przekierujesz wyjście tego skryptu do pliku, możesz go użyć do wyszukania pakietu, który zawiera interesujący plik.

Ned Konz
źródło
To dobrze, ale wyszukuje aktualnie zainstalowane pakiety. Pytanie prosi o poszukiwaniu pakietów nie zainstalowanych.
Burhan Ali
-1

Oto jeden linijka, którą mam w binkatalogu do tego właśnie celu:

$ 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
źródło