【问题标题】:See if binary files exist in subfolders查看子文件夹中是否存在二进制文件
【发布时间】:2016-08-25 03:06:59
【问题描述】:

假设我有这样的目录结构:

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

我如何 (1) 抓取所有文件夹和子文件夹以及 (2) 检查这些文件夹中的任何文件是否为二进制文件?

【问题讨论】:

  • 你对“二进制文件”的定义是什么?
  • 假设二进制表示“包含不应被解释为字符的字节”。在这种情况下,我有兴趣查找字节码文件(例如,.class)而不是源文件(例如,.java)。
  • 从技术上讲,所有文件都是二进制文件...如果您的意思是非文本,那么find . -type f -exec some_app_to_test_for_binaryness {} \; 将是一种方法。
  • find /path/to/root -type f -name '*.class'
  • .class 只是一个例子。我想测试内容,而不是扩展。

标签: linux unix command-line binary directory


【解决方案1】:

find 通常用于搜索目录树。

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

试试这个:

find . -type f -exec file -i {} + | grep ":[^:]*executable[^:]*$" |  sed 's/^\(.*\):[^:]*$/\1/'

-type f 是选择常规文件的过滤器:不是符号链接,不是目录等。

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

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

file -i /bin/bash
/bin/bash: application/x-executable; charset=binary

grep ":[^:]*executable[^:]*$" 选择具有包含 executable 的 mime 类型字符串的文件

sed 's/^\(.*\):[^:]*$/\1/' 清理该行以便仅打印文件名,而无需额外的 mime 类型信息。

【讨论】:

    猜你喜欢
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2017-08-28
    相关资源
    最近更新 更多