如何在Homebrew中识别给定文件的包/公式或所有包拥有的文件的列表?
答案 0 :(得分:69)
要查看包中的所有文件:
brew ls <package>
要查找文件包,请查看以下文件:
ls -l /usr/local/bin/whatever
如果它是由Homebrew安装的,它将成为/usr/local/Cellar/something
的符号链接,这样就可以告诉你它来自哪个包。
答案 1 :(得分:6)
刚刚编写了这个脏函数来获取文件所属的brew包名称:
function brew_find_pkg {
file_to_search="$@"
list_of_brew_pkgs=$(brew list)
for package in $list_of_brew_pkgs; do
brew ls $package | grep -E -q "/${file_to_search}$"
if [ $? -eq 0 ]; then
echo $package
break
fi
done
}
只需在终端输入即可。然后找到一个文件所属的brew包,比如文件pcregrep,只需调用这个函数
brew_find_pkg pcregrep
请注意,如果您提供文件的完整路径,则该功能将无效。
答案 2 :(得分:2)
可以根据指向二进制(Cellar/PACKAGE/...
)的符号链接确定包名称,例如
$ 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
答案 3 :(得分:2)
此函数适用于存储在$( brew --prefix )/bin
目录中的命令。
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
}
例如:
$ 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
答案 4 :(得分:1)
查找并刷新前缀(例如,对于opencv):
find `brew --prefix opencv3`/ -exec ls -l {} \;
(请注意明智地使用-exec,永远不要忘记那些 \; 的,伙计们..它的知道如何知道-exec arg-list已经完成..)
答案 5 :(得分:0)
自制软件包安装到$(brew --prefix)/ Cellar(通常是/ usr / local / Cellar)。
要找出文件所属的包,一种简单的方法是:
$ find $(brew --prefix)/Cellar/ | grep somefilename