Search for executable files using find command

前端 未结 10 837
既然无缘
既然无缘 2020-12-07 11:21

What type of parameter/flag can I use with the Unix find command so that I search executables?

相关标签:
10条回答
  • 2020-12-07 12:14

    I had the same issue, and the answer was in the dmenu source code: the stest utility made for that purpose. You can compile the 'stest.c' and 'arg.h' files and it should work. There is a man page for the usage, that I put there for convenience:

    STEST(1)         General Commands Manual         STEST(1)
    
    NAME
           stest - filter a list of files by properties
    
    SYNOPSIS
           stest  [-abcdefghlpqrsuwx]  [-n  file]  [-o  file]
           [file...]
    
    DESCRIPTION
           stest takes a list of files  and  filters  by  the
           files'  properties,  analogous  to test(1).  Files
           which pass all tests are printed to stdout. If  no
           files are given, stest reads files from stdin.
    
    OPTIONS
           -a     Test hidden files.
    
           -b     Test that files are block specials.
    
           -c     Test that files are character specials.
    
           -d     Test that files are directories.
    
           -e     Test that files exist.
    
           -f     Test that files are regular files.
    
           -g     Test  that  files  have  their set-group-ID
                  flag set.
    
           -h     Test that files are symbolic links.
    
           -l     Test the contents of a directory  given  as
                  an argument.
    
           -n file
                  Test that files are newer than file.
    
           -o file
                  Test that files are older than file.
    
           -p     Test that files are named pipes.
    
           -q     No  files are printed, only the exit status
                  is returned.
    
           -r     Test that files are readable.
    
           -s     Test that files are not empty.
    
           -u     Test that files have their set-user-ID flag
                  set.
    
           -v     Invert  the  sense  of  tests, only failing
                  files pass.
    
           -w     Test that files are writable.
    
           -x     Test that files are executable.
    
    EXIT STATUS
           0      At least one file passed all tests.
    
           1      No files passed all tests.
    
           2      An error occurred.
    
    SEE ALSO
           dmenu(1), test(1)
    
                            dmenu-4.6                STEST(1)
    
    0 讨论(0)
  • 2020-12-07 12:16

    You can use the -executable test flag:

    -executable
                  Matches files which are executable  and  directories  which  are
                  searchable  (in  a file name resolution sense).
    
    0 讨论(0)
  • 2020-12-07 12:18

    It is SO ridiculous that this is not super-easy... let alone next to impossible. Hands up, I defer to Apple/Spotlight...

    mdfind 'kMDItemContentType=public.unix-executable'

    At least it works!

    0 讨论(0)
  • 2020-12-07 12:20

    On GNU versions of find you can use -executable:

    find . -type f -executable -print
    

    For BSD versions of find, you can use -perm with + and an octal mask:

    find . -type f -perm +111 -print
    

    In this context "+" means "any of these bits are set" and 111 is the execute bits.

    Note that this is not identical to the -executable predicate in GNU find. In particular, -executable tests that the file can be executed by the current user, while -perm +111 just tests if any execute permissions are set.

    Older versions of GNU find also support the -perm +111 syntax, but as of 4.5.12 this syntax is no longer supported. Instead, you can use -perm /111 to get this behavior.

    0 讨论(0)
提交回复
热议问题