How can I identify the package/formula for a given file, or a listing of all of a package\'s owned files, in Homebrew?
To see all files in a package:
brew ls <package>
To find the package for a file, look at the file like this:
ls -l /usr/local/bin/whatever
If it was installed by Homebrew, it will be a symlink into /usr/local/Cellar/something
, so that will tell you what package it's from.
Find and brew prefix, (e.g. for opencv):
find `brew --prefix opencv3`/ -exec ls -l {} \;
(Please note judicious use of -exec, and never forget those \;'s, folks .. its how find knows that the -exec arg-list is finished..)
Just wrote this dirty function to get you the brew package name a file belongs to:
function brew_find_pkg {
file_to_search="$@"
for package in $(brew list); do
brew ls $package | grep -E -q "/${file_to_search}$"
if [ $? -eq 0 ]; then
echo $package
break
fi
done
}
Just type that in the terminal. And then to find to find the brew package a file belongs to, say the file gsed
, just call the function like this
brew_find_pkg gsed
Note that the function will not work if you provide the full path of the file.
The package name can be determined based on the symbolic link which points to the binary (Cellar/PACKAGE/...
), e.g.
$ ls -la $(which awk) # => gawk
lrwxr-xr-x 1 kenorb 28 May 20 2015 /usr/local/bin/awk -> ../Cellar/gawk/4.1.1/bin/awk
$ ls -la $(which seq) # => coreutils
lrwxr-xr-x 1 kenorb 14 Apr 8 2015 /usr/local/opt/coreutils/libexec/gnubin/seq -> ../../bin/gseq
Homebrew packages are installed to $(brew --prefix)/Cellar (normally /usr/local/Cellar).
To find out which packages a file belongs to, one simple approach is:
$ find $(brew --prefix)/Cellar/ | grep somefilename
This function works for commands stored in the $( brew --prefix )/bin
directory.
function brew_find_pkg {
cmds_to_search="$@"
brew_bin=$( brew --prefix )/bin
for cmd in $cmd_to_search ; do
if [ -L $brew_bin/$cmd ] ; then
\ls -l $brew_bin/$cmd |cut -f 2 -d '>'
else
echo "$cmd is not a brew command"
fi
done
}
E.g.:
$ brew_find_pkg gawk gcc alskdfja
../Cellar/gawk/4.1.4_1/bin/gawk
../Cellar/gcc/5.3.0/bin/gcc
alskdfja is not a brew command