我想找到所有包含特定文本字符串的文件。您将如何在终端中做到这一点?

评论

如果您想获得快速的结果,请使用Spotlight。另外,如果您要查找不一定直接在文件内存储文本的文件,例如PDF或ODF。

很好的建议,但就我而言,由于文件位于网络驱动程序上,因此我不确定文件是否已编制索引。而且它们也是属于特定程序的xml文件。

看看unix.stackexchange.com/a/37932/213832这个解决方案效果很好

#1 楼

grep -r 'text goes here' path_goes_here


评论


我建议一个人grep发现grep的所有精彩选择

–Ludovic Kuty
16年1月20日在12:31

这列出了路径中存在的每个文件并添加:没有此类文件或目录,我试图仅获取文本出现的列表。我们如何获得该清单?

– CP3O
17-6-17 at 12:38



知道了:grep -lr“文本模式” ./ -s; grep -lr“文本模式” [父母的路径] -s

– CP3O
17年6月1日在12:41



但这会返回匹配文件的内容,而不是文件详细信息(名称,路径)。 @ CP3O的建议有效。

–地理理论
18年11月21日在10:55



如何隐藏“权限被拒绝”结果?

–丹尼尔·斯普林格(Daniel Springer)
20年7月12日在20:51



#2 楼

使用聚光灯

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"


别忘了看:

man mdfind


评论


这对于聚光灯无法索引的文件(即隐藏文件夹中的文件,系统配置文件等)是否有效?

– Peter Berg
2013年9月10日下午4:10

Grep似乎没有解析.xlsx文件,但是效果很好。另一个简单的示例:mdfind -onlyin。 “搜索文字”

– FvD
2015年9月2日,11:44

#3 楼


通过Ack

brew install ack 
ack "text goes here"



通过查找

find . |grep "text goes here"



通过grep

grep -RnslI "text goes here"


#4 楼

您可以根据自己的口味和需求选择以下一种。假设您需要在当前目录中递归搜索包含文本的文件-“异步”,则可以通过以下方式之一进行操作:

使用grep


使用ack


#5 楼

Ignacio的答案很棒,并帮助我找到了包含某些文本的文件。我面临的唯一问题是,运行此命令时,所有文件都会被列出,包括其中一个未显示模式的文件。

No such file or directory这是我在不包含以下文件的文件旁边看到的内容

如果改为将-s添加到命令中,如下所示:
grep -lr "text pattern" ./ -s;使用grep -lr "text pattern" [PATH DIRECTORY] -s时,只会显示哪些文件包含该模式。

类似地,如果grep -nr "text pattern" ./ -s;使用grep -nr "text pattern" [PATH OF DIRECTORY] -s命令可以打印文件,行号以及模式的出现。

如果我的理解是错误的,请更正我。

参考:我怎么能grep无法打印出“没有此类文件或目录”错误?

评论


避免这些讨厌的此类文件错误的另一种方法是将stderr传递给null。 grep ... 2> / dev / null。该解决方案适用于大多数程序,因为它们在stderr流而不是stdout上报告错误消息。我将这种解决方案与find一起使用了很多次,因为它将说很多文件的权限被拒绝。

– jpaugh
17年6月1日在18:02



(1)如果您没有收到有关现有文件的此类文件或目录消息,则可能是您做错了什么,或者系统已损坏。 (2)[父母的路径]与什么有关?

– G-Man说“恢复莫妮卡”
17年6月1日在19:01

@ G-Man我编辑了答案以显示[目录路径],以防万一某个陌生人想知道我为什么放./

– CP3O
17年6月2日在9:38

@ G-Man我使用的是Mac,而不是Ubuntu,不确定我的系统将如何损坏,我几乎没有做任何事情。

– CP3O
17年6月2日在9:39