ura*_*ray 54 find binary files
如果我使用这样的find
命令:
find /mydir/mysubdir -executable -type f
Run Code Online (Sandbox Code Playgroud)
列出所有可执行文件(不包括目录),包括可执行脚本文件(如 script.sh 等)。我想要做的是只列出二进制可执行文件。
Ste*_*n D 49
您可以尝试使用该file
实用程序。根据手册页:
魔术测试用于检查具有特定固定格式数据的文件。这方面的典型示例是二进制可执行文件(编译程序)a.out 文件,其格式在 中定义,并且可能在标准包含目录中。
您可能需要使用正则表达式,但类似于:
$ find -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary'
Run Code Online (Sandbox Code Playgroud)
文件有很多选项,因此您可能需要仔细查看手册页。我使用了我发现的第一个选项,它似乎可以轻松地输出到 grep 输出。
Gil*_*il' 10
这是一种排除脚本的方法,即前两个字符为 的文件#!
:
find -type f -executable -exec sh -c 'test "$(head -c 2 "$1")" != "#!"' sh {} \; -print
Run Code Online (Sandbox Code Playgroud)
对于某些类型的文件,不清楚是要将它们归类为脚本还是二进制文件,例如字节码文件。根据事物的设置方式,这些可能以也可能不以#!
. 如果这些对您很重要,您将不得不使内部 shell 脚本更加复杂。例如,您可以通过以下方式包含 ELF 二进制文件和 Mono 可执行文件以及 Objective Caml 字节码程序,但不包含其他类型的可执行文件,如 shell 脚本或 perl 脚本或 JVM 字节码程序:
find -type f -executable -exec sh -c '
case "$(head -n 1 "$1")" in
?ELF*) exit 0;;
MZ*) exit 0;;
#!*/ocamlrun*) exit 0;;
esac
exit 1
' sh {} \; -print
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
95091 次 |
最近记录: |