Linux 查看子文件夹中是否存在二进制文件

Linux 查看子文件夹中是否存在二进制文件,linux,unix,command-line,binary,directory,Linux,Unix,Command Line,Binary,Directory,假设我有这样一个目录结构: +---A | +---A | \---B +---B | \---A | \---A +---C | | [...] 如何(1)对所有文件夹和子文件夹进行爬网,以及(2)检查这些文件夹中是否有二进制文件?find通常用于搜索目录树 file-i可用于打印文件mime类型信息 尝试一下: find . -type f -exec file -i {} + | grep ":[^:]*executable[^:]*$" | sed 's/^\

假设我有这样一个目录结构:

+---A
|   +---A
|   \---B
+---B
|   \---A
|       \---A
+---C
|
|
[...]

如何(1)对所有文件夹和子文件夹进行爬网,以及(2)检查这些文件夹中是否有二进制文件?

find
通常用于搜索目录树

file-i
可用于打印文件mime类型信息

尝试一下:

find . -type f -exec file -i {} + | grep ":[^:]*executable[^:]*$" |  sed 's/^\(.*\):[^:]*$/\1/'
-type f
是一个选择常规文件的过滤器:不是符号链接,不是目录等

exec file-i{}+
对目录树中找到的每个常规文件执行
file-i

文件-i
正在打印mime类型字符串:

file -i /bin/bash
/bin/bash: application/x-executable; charset=binary
grep:[^:]*可执行文件[^::]*$”
选择包含
可执行文件的mime类型字符串的文件


sed的/^\(.*):[^::::*$/\1/”
清理该行,以便只打印文件名,而不打印额外的mime类型信息。

您对“二进制文件”的定义是什么?比如说二进制意味着“包含不打算解释为字符的字节”。在这种情况下,我对查找字节码文件感兴趣(例如,
.class
)但不是源文件(例如,
.java
)。从技术上讲,所有文件都是二进制的……如果您指的是非文本,那么
find.-type f-exec some_app_to_test_for_binaryness{}\;
是一种方法。或者
查找/path/to/root-type f-name'*.class'
.class
只是一个例子。我想测试内容,而不是扩展名。