加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – 如何将grep限制为仅搜索所需的文件

发布时间:2020-12-15 21:03:51 所属栏目:安全 来源:网络整理
导读:我们有一个相当大而复杂的文件系统,我正在尝试生成包含特定文本字符串的文件列表.这应该很简单,但是我需要排除’./svn’和’./pdv’目录(可能还有其他目录)并且只查看* .p,* .w或.i类型的文件. 我可以使用程序轻松完成此操作,但运行速度非常慢.我想加快这个
我们有一个相当大而复杂的文件系统,我正在尝试生成包含特定文本字符串的文件列表.这应该很简单,但是我需要排除’./svn’和’./pdv’目录(可能还有其他目录)并且只查看* .p,* .w或.i类型的文件.

我可以使用程序轻松完成此操作,但运行速度非常慢.我想加快这个过程(因此我不会反复搜索数千个文件),因为我需要针对一长串标准运行此类搜索.

通常,我们使用以下方法搜索文件系统:

find . -name "*.[!r]*" -exec grep -i -l "search for me" {} ;

这是有效的,但我不得不使用一个程序来排除不需要的目录,所以它运行得非常慢.

看完这里的主题后:
Stack Overflow thread

我决定尝试其他一些方法:

grep -ilR "search for me" . --exclude ".svn" --excluse "pdv" --exclude "!.{p,w,i*}"

排除’./svn’,但不排除’./pdv’目录,不限制查看的文件.

grep -ilR "search for me" . --exclude ".svn" --excluse "pdv" --include "*.p"

排除’./svn’,不限制查看的文件.

find . -name "*.[!r]*" -exec grep -i -l ".svn" | grep -i -l "search for me" {} ;

我甚至无法得到这个(或其变体)来成功运行.

find . ! -name "*.svn*" -prune -print -exec grep -i -l "search for me" {} ;

不归还任何东西.它看起来像找到.svn目录后立即停止.

解决方法

怎么样的:

find . ( ( -name .svn -o -name pdv ) -type d -prune ) -o ( -name '*.[pwi]' -type f -exec grep -i -l "search for me" {} + )

这将:
– 忽略名为.svn和pdv的目录的内容
– 名为*的grep文件(和符号链接到文件).[pwi]

exec之后的选项意味着将尽可能多的文件收集到一个命令中,这将适合命令行(Linux中大约有100万个字符).如果您必须迭代数千个文件,这可以严重加快处理速度.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读