搜索所有包含文本的文件

搜索所有包含文本的文件

使用 Busybox,如何通过一堆目录递归地在一堆文件中搜索表达式,但只能查看文本文件?

我们不知道文件的后缀是什么;可能是 .sh,也可能什么都没有,也可能是其他的。我考虑以某种方式根据编码进行搜索,尽管我也不太确定编码是什么。

我试过了busybox grep -r但是它也会搜索二进制文件,这浪费了很多时间。

答案1

grep--binary-files支持将二进制文件视为binarytext的选项without-match。最后一个选项应该跳过二进制文件。它相当于grep -I。我做了一个测试,似乎 Busyboxgrep支持-I跳过二进制文件。

grep在确定文件是二进制还是文本方面并不是“神奇的”:它只是检查前几个字节以查看它们是否是文本,并假设文件的其余部分也是相同的(根据man grep)。


旁注:可以通过比较head -1 myfile文件是否等于来模拟这一点head -1 myfile | strings。如果file可用,则依赖性更强,但它不在 Busybox 中,并且如果主要使用 Busybox,则很可能不在系统上。

答案2

二进制文件与结构体有什么区别

struct MyBin
{
    byte a;
    byte b;
    byte c;
}

与价值观

myBin.a = 70;
myBin.b = 111;
myBin.c = 111;

还有一个包含文本的文本文件Foo

文本文件是一种二进制文件,您可以使用称为字符编码(ASCII、UTF-8 等)的特殊查找代码对其进行解释。因此,没有简单的方法可以将“二进制文件”与“文本文件”区分开来。

可能有一种方法可以排除设置了执行位的文件,或者仅搜索文件大小以下的文件(我怀疑您的文本文件是否超过 1 MB),但我对如何过滤 grep 结果没有足够的了解,无法举例说明如何执行此操作。

相关内容