You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用grep高效检测二进制文件?解析实测性能差异

筛选非二进制文件的grep性能差异疑问

我需要批量筛选目录中的二进制文件,不想用file <filename>配合grep匹配"binary"/"executable"这类关键词(怕遗漏特殊情况),所以倾向于用grep的-I选项(该选项会自动跳过二进制文件)。

用以下命令可以列出所有非二进制文件:

grep -r -I -l . <directory>

但我发现这个命令执行耗时比预期长,于是针对不同实现方式做了性能测试(测试目录包含数千个递归文件),结果如下:

  1. 循环调用grep:

    time { for f in $(find <dir> -type f); do grep -I -l . $f; done; }
    
    • 耗时:总耗时1分20秒,用户态20秒,内核态1分钟
  2. 循环调用grep并添加-m 1(匹配到1次就停止扫描):

    time { for f in $(find <dir> -type f); do grep -I -l -m 1 . $f; done; }
    
    • 耗时:总耗时1分20秒,用户态20秒,内核态1分钟
    • 疑问:-m 1完全没提升性能,这是为什么?
  3. grep递归扫描目录:

    time { grep -r -I -l . <dir>; }
    
    • 耗时:总耗时12秒,用户态1.5秒,内核态2秒
    • 疑问:用户态+内核态时间远小于总耗时,差值去哪了?
  4. grep递归扫描并添加-m 1:

    time { grep -r -I -l -m 1 . <dir>; }
    
    • 耗时:总耗时10秒,用户态0.1秒,内核态1.5秒
    • 疑问:这次-m 1明显提升了性能,和循环调用的情况完全不同,为什么?

我对grep的底层工作原理了解不够,没法解释这些性能差异。


内容的提问来源于stack exchange,提问作者David Simpson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:43:11