在谷歌搜索了几次之后,我想到了:

find my_folder -type f -exec grep -l "needle text" {} \; -exec file {} \; | grep text

这非常不方便,会输出不需要的文本,例如mime类型信息.有更好的解决方案吗?我在同一个文件夹中有很多图像和其他二进制文件,还有很多需要搜索的文本文件.

推荐答案

我知道这是一个旧的线程,但我偶然发现了它,并认为我应该分享我的方法,我发现这是一种非常快速的方法,使用find只查找非二进制文件:

find . -type f -exec grep -Iq . {} \; -print

grep的-I选项告诉它立即忽略二进制文件,.选项和-q选项将使它立即匹配文本文件,因此速度非常快.如果你关心空间的话,可以把-print换成-print0,把管道换成xargs -0之类的(谢谢你的提示,@lucas.werkmeister!)

此外,第一个点仅在某些BSD版本的find上是必需的,比如在OS X上,但如果你想把它放在别名或其他东西中,一直放在那里并不会有任何影响.

EDIT:正如@ruslan正确指出的,-and可以省略,因为它是隐含的.

Linux相关问答推荐

在shell 中使用排除模式的grep

在PowerShell for Linux上,打印出的maven命令还有其他字符

如何在脚本中使用sudo修改其他用户的crontab

为什么 `std::this_thread::yield()` 比 `std::this_thread::sleep_for(0s)` 慢 10 倍?

c++进程状态中的+是什么意思

为什么`__vfprintf_internal`(`stdio.h`中的`printfn`)强制`$rbp`在我的x86-64机器上向前跳转6313864字节?

在 bash 中解析变量

所有进程的Linux环境变量

使用 AWS cli 从 AWS 机密管理器解析机密

如何将文件从 Vagrant 机器复制到 localhost

如何在 Ubuntu 12.04 中更改 Jenkins 安装的端口号

使用 linux 命令行 (bash) 从网络摄像头拍照

带有 curl 的 Linux 脚本来判断 Web 服务是否已启动

如何列出附加到Linux中共享内存段的进程?

如何以另一个用户的身份使用 sudo 在 bash 子shell 中执行一系列命令?

以原子方式移动目录

使用 C++ 代码在 Linux 中清除终端

比较文件的日期 bash

为嵌入式 Linux 设备实施更新/升级系统

如何在 docker 容器中运行 cron 作业(job)