How to find package for installed file in Brew?

后端 未结 6 568
囚心锁ツ
囚心锁ツ 2020-12-23 13:37

How can I identify the package/formula for a given file, or a listing of all of a package\'s owned files, in Homebrew?

相关标签:
6条回答
  • 2020-12-23 13:42

    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.

    0 讨论(0)
  • 2020-12-23 13:53

    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..)

    0 讨论(0)
  • 2020-12-23 13:58

    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.

    0 讨论(0)
  • 2020-12-23 14:00

    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
    
    0 讨论(0)
  • 2020-12-23 14:01

    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
    
    0 讨论(0)
  • 2020-12-23 14:09

    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
    
    0 讨论(0)
提交回复
热议问题