【问题标题】:Cocoa or Bash: Test if a file is an executable binaryCocoa 或 Bash:测试文件是否为可执行二进制文件
【发布时间】:2012-08-10 17:31:15
【问题描述】:

在 Cocoa 中,我将如何测试文件是否为可执行二进制文件?不幸的是,[NSFileManager isExecutableFileAtPath:] 也将为脚本和目录返回 true,几乎所有设置了可执行位的文件都不是我想要的。

虽然直接使用 Cocoa 是我的首选方法,但我可以轻松地将 Bash 解决方案封装在 NSTask 中就足够了。

【问题讨论】:

    标签: cocoa bash testing executable


    【解决方案1】:

    您可以在代码中轻松过滤掉的目录,但是知道什么是二进制文件,什么不是二进制文件有点困难,因为实际上,唯一的方法是打开文件并读取它,这是您需要自己做的事情.

    然而,主要问题是应该将什么视为二进制文件。

    我见过开头有十几个文本行的可执行文件(因此,实际上它们是脚本),但其余的都是二进制文件。你会如何对它们进行分类?

    如果您可以根据加载方式对它们进行分类,您可以尝试使用命令file,它会尽可能准确地告诉您文件是什么。

    【讨论】:

    • 当我们在这些目录结构中编译我们正在测试的二进制文件时,我们并没有做任何花哨的事情。我们正在寻找使用 gcc 或 clang 从 C 或 Objective-C 编译的任何内容。
    • 添加了使用文件(命令行工具)获取类型的建议。它应该报告这样的 Mach-O 可执行文件。
    【解决方案2】:

    我不知道 Cocoa,但这是一个 bash 解决方案:

    find ../ -type f -perm +111 | \
      xargs -n 1 -I {} file "{}" | grep -v text | cut -d: -f1
    

    【讨论】:

    • 查找:-executable:未知的主要或操作员
    • 记住,这是 OS X,不是 Linux。
    • 查找:-perm: /111: 非法模式字符串
    猜你喜欢
    • 2021-07-25
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2013-08-26
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多