kni*_*ttl 185
可以使用-perm
(不推荐)或-executable
(推荐,因为它考虑了 ACL )来检查可执行文件。要使用该-executable
选项:
find <dir> -executable
Run Code Online (Sandbox Code Playgroud)
如果您只想查找可执行文件而不是可搜索目录,请结合使用-type f
:
find <dir> -executable -type f
Run Code Online (Sandbox Code Playgroud)
inn*_*naM 37
使用查找-perm
选项。这将在当前目录中查找可由其所有者、组成员或其他人执行的文件:
find . -perm /u=x,g=x,o=x
Run Code Online (Sandbox Code Playgroud)
编辑:
我刚刚找到了至少在 GNU find 4.4.0 中存在的另一个选项:
find . -executable
Run Code Online (Sandbox Code Playgroud)
这应该会更有效,因为 ACL 也被考虑在内。
fri*_*mle 34
我知道这个问题特别提到了 Linux,但由于它是 Google 上的第一个结果,我只想添加我正在寻找的答案(例如,如果您 - 像我现在一样 - 被您的雇主强迫使用非 GNU /Linux 系统)。
在macOS 10.12.5上测试
find . -perm +111 -type f
Run Code Online (Sandbox Code Playgroud)
小智 7
我有另一种方法,以防你真正想要的只是对可执行文件做一些事情——而不一定要强制 find 过滤自己:
for i in `find -type f`; do [ -x $i ] && echo "$i is executable"; done
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个,因为它不依赖于-executable
哪个平台特定;并且它不依赖于-perm
哪个有点神秘,有点特定于平台,并且如上所述要求文件对每个人(不仅仅是你)都是可执行的。
这-type f
很重要,因为在 *nix 目录中必须是可执行的才能遍历,并且find
命令中的查询越多,命令的内存效率就越高。
无论如何,只是提供另一种方法,因为 *nix 是十亿方法的土地。
小智 5
标记为可执行的文件不必是可执行或可加载文件或对象。
这是我使用的:
find ./ -type f -name "*" -not -name "*.o" -exec sh -c '
case "$(head -n 1 "$1")" in
?ELF*) exit 0;;
MZ*) exit 0;;
#!*/ocamlrun*)exit0;;
esac
exit 1
' sh {} \; -print
Run Code Online (Sandbox Code Playgroud)