使用 grep 检测二进制文件的最佳方法是什么?

问题描述 投票:0回答:1

我正在尝试读取一长串文件并过滤掉二进制文件。我知道您可以使用

file <filename>
然后使用
grep
来表示“二进制”或“可执行文件”等关键字,但我担心使用这种方法会忽略一些关键字。我赞成直接将
grep
-I
选项一起使用。

例如,这可能不是最好的,但你可以这样做

grep -r -I -l . <directory>

它将返回该目录中所有非二进制即“可读”文件的列表。

但是,据我所知,上面的命令可能需要很长时间。

我做了一个实验,尝试使用

time
为每个命令计时,尝试同一件事的不同方法。这是结果注意,相关目录递归地包含数千个文件

  1. time { for f in $(find <dir> -type f); do grep -I -l . $f; done; }
  • 结果:总共 1m20s,20s 用户,1m 系统
  1. time { for f in $(find <dir> -type f); do grep -I -l -m 1 . $f; done; }
  • 结果:总共 1m20s,20s 用户,1m 系统(奇怪的是,-m 1 根本没有帮助)
  1. time { grep -r -I -l . <dir>; }
  • 结果:总共12秒,1.5个用户,2个系统(为什么用户加系统加起来不等于总数?)
  1. time { grep -r -I -l -m 1 . <dir>; }
  • 结果:总共 10 秒,0.1 个用户,1.5 个系统(显然 -m 1 这次有帮助)

我不明白 grep 的工作原理足以解释这些差异。

linux bash time grep binaryfiles
1个回答
0
投票

如果您想根据您的评论了解编码,那么

file --mime-encoding FILE

您会得到

binary
us-ascii
utf-8

© www.soinside.com 2019 - 2024. All rights reserved.