如何在Linux上查找所有包含特定文本的文件?


5254

我试图找到一种方法来扫描我的整个Linux系统,以查找包含特定文本字符串的所有文件。只是为了澄清,我正在文件中寻找文本,而不是在文件名中寻找文本。

当我查找如何执行此操作时,我两次遇到此解决方案:

find / -type f -exec grep -H 'text-to-find-here' {} \;

但是,它不起作用。似乎显示了系统中的每个文件。

这接近正确的方法吗?如果没有,我应该怎么办?这种在文件中查找文本字符串的功能对于我正在执行的某些编程项目非常有用。


21
请记住,grep会将其中的任何内容解释.为单字符通配符。我的建议是始终使用fgrep或egrep。
2013年

10
无论如何,你快到了!只需替换-H-l(也许grepfgrep)即可。要排除具有某些名称模式的文件,可以使用find更高级的方式。不过,值得学习使用find。只是man find
Walter Tross

6
find … -exec <cmd> +find … -exec <cmd> \;。更容易输入且速度更快。它仅在<cmd>接受任意数量的文件名参数时才有效。如果<cmd>启动缓慢(如Python或Ruby脚本),则执行时间的节省特别大。
hagello '16

要在给定路径中非递归搜索,命令是`grep --include = *。txt -snw“ pattern” thepath / *。
斯特凡·洛朗

@StéphaneLaurent我认为您太过复杂了。只是说grep "pattern" path/*.txt
fedorqui'SO停止伤害

Answers:


9504

请执行下列操作:

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r还是-R递归的
  • -n 是行号,并且
  • -w 代表匹配整个单词。
  • -l 可以添加(小写的L)以仅给出匹配文件的文件名。

除了这些,--exclude--include--exclude-dir标志可用于高效搜索:

  • 这只会搜索扩展名为.c或.h的文件:

    grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
    
  • 这将排除搜索以.o扩展名结尾的所有文件:

    grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
    
  • 对于目录,可以通过--exclude-dir参数排除特定目录。例如,这将排除dirs dir1 /,dir2 /及其全部与* .dst /匹配的目录:

    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
    

这对我来说非常有效,可以达到与您几乎相同的目的。

有关更多选项,请检查man grep


74
使用--exclude。像“ grep -rnw --exclude = *。o'目录'-e“模式”
rakib_ 2013年

98
值得注意的是:该r选项似乎是懒惰的(遍历深度优先,然后在第一个目录之后停止),而R贪婪的(正确遍历整个树)。
Eliran

5
grep -rnw“我正在寻找的字符串”完成了我所需要的。谢谢!
ViliusK 2015年

33
注意(特别是对于新手):上述命令中的引号很重要。
madD7

69
@Eliran马尔卡R连接r都将遍历目录正确,但R会遵循符号链接。
bzeaman '16

1495

您可以使用grep -ilR

grep -Ril "text-to-find-here" /
  • i 代表忽略大小写(在您的情况下为可选)。
  • R 代表递归。
  • l 代表“显示文件名,而不是结果本身”。
  • / 代表从计算机的根开始。

85
根据我的经验,它-i会使速度减慢很多,因此在不必要时不要使用它。在特定目录下对其进行测试,然后进行概括。它应在几分钟内完成。我认为正则表达式会使它变慢。但是我的评论是基于假设的,我建议您先行进行测试time
fedorqui'SO停止伤害

4
是的,/*代表那个。无论如何,我只是对其进行了测试,并发现它确实/有效。
fedorqui'SO停止伤害

10
如果您不使用正则表达式进行搜索,则可以在大多数系统上使用fgrep代替grep。
markle976 2013年

8
是的@ markle976,从人的grep事实:fgrep is the same as grep -F -> Interpret PATTERN as a list of fixed strings
fedorqui'SO停止伤害

17
您可以将/替换为目录路径,也可以grep -Ril "text-to-find-here" ~/sites/使用。当前目录grep -Ril "text-to-find-here" .
黑色

329

您可以使用ack。就像grep的源代码一样。您可以使用它扫描整个文件系统。

做就是了:

ack 'text-to-find-here'

在您的根目录中。

您还可以使用正则表达式,指定文件类型等。


更新

我刚刚发现了Silver Searcher,它就像ack一样,但是比它快3-5倍,甚至忽略了.gitignore文件中的模式。


57
非常有用,简单且快速。警告:“在Debian发行版中,ack被打包为“ ack-grep”,因为“ ack”已经存在”(来自beyondgrep.com/install)。您可能最终会在这些Linux上运行汉字代码转换器...
Jose_GD

11
ACK或ACK-的grep有很好的亮点,但发现的grep +适当的时候采用的是更好的性能
斯瓦沃米尔Lenart

14
请注意,ripgrep的速度比这里提到的其他任何东西都要快,包括Silver Searcher和普通的'ol grep。请参阅此博客文章以获取证明。
Radon Rosborough

194

您可以使用:

grep -r "string to be searched"  /path/to/dir

r代表递归等都将在指定的路径搜索以及它的子目录。这将告诉您文件名,并打印出文件中出现字符串的行。

或与您尝试的命令类似的命令(示例:),用于搜索所有javascript文件(* .js):

find . -name '*.js' -exec grep -i 'string to search for' {} \; -print

这将在显示文本的文件中打印行,但不打印文件名。

除了此命令外,我们也可以编写以下代码: grep -rn“要搜索的字符串” / path / to /目录/或/ file -r:递归搜索 n:将显示匹配的行号


1
感谢查找版本。我的grep版本(NAS的busybox)没有-r选项,我真的需要另一种解决方案!
jc 2013年

3
谢谢您的“查找”版本!能够通过“ .js”或“ .txt”等进行过滤非常重要。没有人愿意花费数小时等待grep完成对上次家庭度假的所有千兆字节视频的搜索,即使该命令是易于输入。
强大的力量,

比接受版本更好的grep,因为接受后不搜索半字
waza123


73

包含给定文本的文件名列表

首先,我相信您已使用-H而不是-l。另外,您也可以尝试在引号内添加文本,后跟{} \

find / -type f -exec grep -l "text-to-find-here" {} \; 

假设您要在目录中搜索包含特定文本“ Apache License”的文件。它将显示与下面类似的结果(根据您的目录内容,输出将有所不同)。

bash-4.1$ find . -type f -exec grep -l "Apache License" {} \; 
./net/java/jvnet-parent/5/jvnet-parent-5.pom
./commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.pom
./io/swagger/swagger-project/1.5.10/swagger-project-1.5.10.pom
./io/netty/netty-transport/4.1.7.Final/netty-transport-4.1.7.Final.pom
./commons-codec/commons-codec/1.9/commons-codec-1.9.pom
./commons-io/commons-io/2.4/commons-io-2.4.pom
bash-4.1$ 

消除区分大小写

即使您不使用“ text”和“ TEXT”之类的大小写,也可以使用-i开关忽略大小写。您可以在此处阅读更多详细信息。

希望这对您有所帮助。


2
该命令的作用是:find将找到的所有路径传递给命令grep -l "text-to-find-here" <file found>"。您可以在文件名中添加限制,例如find / -iname "*.txt",仅搜索名称以.txt
Mene

1
@Auxiliary-包含示例输出,以免引起读者的困惑。
lkamal

2
@Mene这是一个非常可悲的状态,辅助的评论比您的要多...即使他们的评论来自2014年,而您的评论是2017年,他们的评论只有6个,而实际上应该是0个,而您的只有1个(现在有2个)是我不想相信的东西。
Pryftan '18年

@Mene话-iname是不区分大小写的,这意味着它也可以找到.TXT文件,例如TxT和TXt等。
Pryftan '18年

66

grepGNUBSD

您可以使用该grep工具递归搜索当前文件夹,例如:

grep -r "class foo" .

注意:-r-递归搜索子目录。

您还可以使用全局语法在特定文件中进行搜索,例如:

grep "class foo" **/*.c

注意:通过使用globlob选项**),它将以特定扩展名或模式递归扫描所有文件。要启用此语法,请运行:shopt -s globstar您也可以使用**/*.*所有文件(不包括隐藏文件和不带扩展名的文件)或任何其他模式。

如果错误指出您的参数过长,请考虑缩小搜索范围,或改用如下find语法:

find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'

或者使用ripgrep

ripgrep

如果您正在处理较大的项目或大文件,则应ripgrep改用,例如:

rg "class foo" .

GitHub项目页面上签出文档,安装步骤或源代码。

它比其他工具一样快多了GNU / BSD grepucgagsiftackpt或类似的,因为它是建立在之上锈病的正则表达式引擎,它使用有限自动机,SIMD和积极文字的优化,使搜索速度非常快。

它支持.gitignore文件中指定的忽略模式,因此单个文件路径可以同时与多个glob模式匹配。


您可以使用常见参数,例如:

  • -i -不敏感的搜索。
  • -I -忽略二进制文件。
  • -w -搜索整个单词(与部分单词匹配相反)。
  • -n -显示您的比赛路线。
  • -C/ --context(例如-C5)-增加上下文,因此您可以看到周围的代码。
  • --color=auto -标记匹配的文本。
  • -H -在找到文本的地方显示文件名。
  • -c-显示匹配行数。可以结合使用-H

1
我还发现扩展的通配很有用。但是请记住,如果确实有大量文件,则会出现“参数列表过长”错误。(简单的globbing也容易出现这种错误)。
Yoory N.

2
对于吸入整个文件系统,rg的痛苦要比几乎任何其他工具都要少。
LK

55

如果您grep不支持递归搜索,则可以结合find使用xargs

find / -type f | xargs grep 'text-to-find-here'

我发现此格式比的格式更容易记住find -exec

这将输出文件名和匹配行的内容,例如

/home/rob/file:text-to-find-here

您可能要添加到的可选标志grep

  • -i -不区分大小写的搜索
  • -l -仅输出找到匹配项的文件名
  • -h -仅输出匹配的行(不输出文件名)

3
grep 'text-to-find-here'如果find找不到任何文件,则相当于没有文件名。这将挂起并等待用户输入!--no-run-if-empty作为选项添加到xargs
hagello

3
如果文件或目录名称包含空格(xargs解释为分隔符的字符),则find和xargs的这种组合将无法正常工作。使用find … -exec grep … +。如果您坚持将find与xargs一起使用,请使用-print0-0
hagello

43
grep -insr "pattern" *
  • i:忽略PATTERN和输入文件中的大小写区别。
  • n:在输出的每一行之前,在其输入文件中添加从1开始的行号。
  • s:禁止显示有关不存在或不可读文件的错误消息。
  • r:递归地读取每个目录下的所有文件。

3
您能否解释一下您的答案在其他答案上的改进,或者与其他答案有何不同?
Amos M. Carpenter

记住起来并不复杂,它将涵盖所有模式(区分大小写->关闭,包括文件名和行号,并将进行递归搜索等),最后使用“ *”将搜索所有目录(无需指定任何目录)路径或目录名称)。
enfinet '16

抱歉,我应该更清楚一些:如果您可以在回答中包含该解释,那将是很好的。就目前而言,尤其是已经有了许多其他类似的答案时,很难从如此简短的答案中看出,尝试比接受的答案或赞成的答案之一会有什么好处。
Amos M. Carpenter

6
@ AmosM.Carpenter我最喜欢这个答案的一件事是指出了抑制参数,它可以帮助滤除与获取我们实际想要的结果无关紧要的噪声。Grep在某些“文件”上打印诸如“未实现功能”,“参数无效”,“资源不可用”等错误。
leetNightshade

@leetNightshade:我假设您是在对我发表评论,因为我要求对稀疏的原始帖子进行解释。请参阅Fabio的重大修订,以使我之前的评论有意义。
Amos M. Carpenter

39

有一个名为The Silversearcher的新实用程序

sudo apt install silversearcher-ag

它与Git和其他VCS紧密合作。因此,您不会在.git或其他目录中得到任何内容。

您可以简单地使用

ag "Search query"

它将为您完成任务!


35

如何在Linux上查找所有包含特定文本的文件?(...)

我两次遇到此解决方案:

find / -type f -exec grep -H 'text-to-find-here' {} \;


如果在您的示例中使用find like,最好将-s--no-messages)添加到中grep,并2>/dev/null在命令末尾避免由和发出大量的权限被拒绝的消息:grepfind

find / -type f -exec grep -sH 'text-to-find-here' {} \; 2>/dev/null

在类似于Unix的平台上, find是用于搜索文件的标准工具-在查找特定文本时与grep结合使用。顺便说一下,通常将 find命令与 xargs结合使用。

出于相同的目的,存在更快,更轻松的工具-参见下文。当然,如果可以在您的平台上使用它们,则最好尝试一下:

更快,更轻松的替代方案

RipGrep-最快的搜索工具:

rg 'text-to-find-here' / -l

白银搜寻者

ag 'text-to-find-here' / -l

ack

ack 'text-to-find-here' / -l

注意:您也可以添加2>/dev/null到这些命令,以隐藏许多错误消息。


警告除非您真的无法避免,否则请不要从'/'(根目录)中搜索,以免搜索时间长而效率低!因此,在上面的示例中,您最好将“ / ” 替换为子目录名称,例如“ / home”,具体取决于您实际要搜索的位置...


“查找是在类似Unix的平台上搜索包含特定文本的文件的标准工具”对我来说似乎模棱两可。即使是递归,grep find也不会直接在文件内部搜索文本。也许那些额外的工具对某些但旧的计时器有用,而那些习惯了例如grep根本不给他们时间的人(我当然不会)。并不是说他们没用。
Pryftan '18年

“...。包含特定文本...”:句子的这一部分不准确(因为找不到与搜索的这一部分相关的本身)。编辑。谢谢。
Bludzee

很高兴有帮助!快速浏览一下,唯一的一件事就是将word 文件夹更改为目录,但是我知道这是我的一个十字军东征,我永远也不会赢。虽然没有放弃...
Pryftan

为什么不使用“目录”而不是“文件夹”,但是为什么呢?请分享您的“十字军东征”!
Bludzee

我说的是使用目录!引用:最好用子文件夹名称替换“ /”,这是我的宠儿。尤其是因为Windows以前也将其称为“目录”。嗯..也许你明白了。为什么?好吧,因为那就是所谓的。在文件系统级别也称其为。并以这种方式查看它:是否曾经调用过(对于DOS)fol?不,当然不; 它被称为dir(我相信它仍然是)。文件夹是为用户友好而设计的,尽管在这种情况下,它可能会为不太“高级”的用户而愚蠢?
Pryftan

29

尝试:

find . -name "*.txt" | xargs grep -i "text_pattern"

5
这实际上是不使用时的主要示例xargsecho "file bar.txt has bar" > bar.txt; echo "file foo bar.txt has foo bar" > "foo bar.txt"; echo "You should never see this foo" > foo; find . -name "*.txt" | xargs grep -i foo # ./foo:You should never see this foo。在xargs这里匹配错误的文件,不符合预期的文件。要么使用a find .. -print0 | xargs -0 ...,要么那是对管道或更好的管道的无用使用find ... -exec grep ... {} +
shalomb

29

用于pwd从您所在的任何目录中搜索,向下递归

grep -rnw `pwd` -e "pattern"

更新 根据您使用的grep版本,您可以省略pwd.如果没有给出目录,则在较新的版本上似乎是grep的默认情况:

grep -rnw -e "pattern"

要么

grep -rnw "pattern"

将做与上述相同的事情!


3
pwd根本不需要使用,因为它是默认设置。grep -rnw "pattern"足够了。
fedorqui'SO停止伤害

实际上,grep -rnw和相似的答案就像三年前一样,我不知道这个答案如何增加价值。
fedorqui'SO停止伤害

所选答案不显示默认模式,以及5名人民似乎认为它是有用
mahatmanich

“默认模式”是什么意思?接受的答案包含grep -rnw '/path/to/somewhere/' -e "pattern"您在这里所拥有的。访问230万后获得5票并不意味着太多。
fedorqui'SO停止伤害

我同意:-)我在原始答案中所缺少的是用例,您根本不必给出路径或以递归方式搜索当前目录,而这并没有反映在接受的答案中。因此,深入学习grep是一个很好的学习经验。
mahatmanich '16

19

grep 即使我们不寻找字符串也可以使用。

只需运行,

grep -RIl "" .

将打印出所有文本文件的路径,即仅包含可打印字符的文件。


2
我看不出有什么比单纯使用lsfind(递归)更好的方法了
fedorqui'SO stop harm'16

17

这是可用于搜索文件的几个命令列表。

grep "text string to search” directory-path

grep [option] "text string to search” directory-path

grep -r "text string to search” directory-path

grep -r -H "text string to search” directory-path

egrep -R "word-1|word-2” directory-path

egrep -w -R "word-1|word-2” directory-path

5
这对现有答案有什么作用?
fedorqui'SO停止伤害

@fedorqui egrep等同于grep -E它,它意味着--extended-regexp您可以在这里找到详细信息unix.stackexchange.com/a/17951/196072
omerhakanbilici


15
find /path -type f -exec grep -l "string" {} \;

评论说明

find是一个命令,可用于在给定路径的子目录中查找文件和其他对象,例如目录和链接。如果您没有指定文件名应满足的掩码,它将枚举所有目录对象。

-type f specifies that it should proceed only files, not directories etc.
-exec grep specifies that for every found file, it should run grep command, passing its filename as an argument to it, by replacing {} with the filename

15

尝试:

find / -type f -exec grep -H 'text-to-find-here' {} \;

它将搜索所有文件系统,因为/它是根文件夹。

对于主文件夹使用:

find ~/ -type f -exec grep -H 'text-to-find-here' {} \;

对于当前文件夹使用:

find ./ -type f -exec grep -H 'text-to-find-here' {} \;

也许关于文件夹差异的详细信息对于许多人来说是显而易见的...但是对于新手也很有帮助。+1
nilon

1
这对现有答案有什么作用?
fedorqui'SO停止伤害

称之为我的十字军东征,但是这个词是“目录”。这不是Windows(无论如何以前都使用“目录”-9x之前)。请停止说“文件夹”。至于您的最后一条命令,您甚至不需要'/'就可以了。
Pryftan '18年

15

希望这会有所帮助...

扩大grep一点以在输出中提供更多信息,例如,可以按照以下步骤获取文件所在文本的行号:

find . -type f -name "*.*" -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"

而且,如果您知道文件类型是什么,则可以通过指定要搜索的文件类型扩展名(在这种情况下为.pasOR .dfm文件)来缩小搜索范围:

find . -type f \( -name "*.pas" -o -name "*.dfm" \) -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searchtext"

选项的简短说明:

  1. .find当前目录指定。
  2. -name*.*”:对于所有文件(-name“ *.pas” -o -name“ *.dfm”):仅*.pasOR *.dfm文件,或用-o
  3. -type f 指定您正在寻找文件
  4. -print0--null在另一侧|(管)是至关重要的,使文件名从findgrep嵌入在xargs,允许文件名的通过在文件名的空间,从而允许grep来治疗路径和文件名作为一个字符串,而不是在每个空间上分解。

-name '*.*'你不是在说什么 它不会在名为“ file”的文件上拾取,因为该模式不等于该文件(没有.ext);*但是(将。文件放在一边)。但是还有另一件事:如果您要所有文件,为什么首先要指定文件名呢?没有其他评论-只是很高兴知道仍然有人不使用MS术语“文件夹”(在说了足够多之后,我不愿添加,但我想指出您所做的陈述有些错误)文件名-以及“全部”情况下的冗余/无用)。
Pryftan '18年

15

简单find可以很方便地工作。在~/.bashrc文件中为其添加别名:

alias ffind find / -type f | xargs grep

启动一个新的终端并发出:

ffind 'text-to-find-here'

14

我写了一个Python脚本,它执行类似的操作。这就是应该使用此脚本的方式。

./sniff.py path pattern_to_search [file_pattern]

第一个参数,path是我们将在其中进行递归搜索的目录。第二个参数,pattern_to_search是我们要在文件中搜索的正则表达式。我们使用Python re库中定义的正则表达式格式。在此脚本中,.还匹配换行符。

第三个参数file_pattern是可选的。这是另一个对文件名起作用的正则表达式。仅考虑与该正则表达式匹配的那些文件。

例如,如果我要搜索扩展名py包含,Pool(后跟word的Python文件Adaptor,请执行以下操作:

./sniff.py . "Pool(.*?Adaptor"  .*py
./Demos/snippets/cubeMeshSigNeur.py:146 
./Demos/snippets/testSigNeur.py:259 
./python/moose/multiscale/core/mumbl.py:206 
./Demos/snippets/multiComptSigNeur.py:268 

瞧,它会生成匹配文件的路径和找到匹配项的行号。如果找到多个匹配项,则每个行号将附加到文件名后。


14

如果您要严格使用,请find使用find + grep

find /path/to/somewhere/ -type f -exec grep -nw 'textPattern' {} \;

脚步:

1. find用于搜索文件,2.
然后grep在所有文件上执行。

这可以让您find找到文件。

  • 使用-name Pattern,如果你想grep只有某些文件:

    find /path/to/somewhere/ -type f -name \*.cpp -exec grep -nw 'textPattern' {} \;

您可以使用它并使用其他选项find来改善或缩小文件搜索范围。


有什么区别?它可以在文件路径中使用空格吗?
Peter Mortensen

13

采用:

grep -c Your_Pattern *

这将报告当前目录中每个文件中有多少个模式副本。


13

grep是您实现此目标的好朋友。

grep -r <text_fo_find> <directory>

如果您不关心要查找的文本大小写,请使用:

grep -ir <text_to_find> <directory>

就我而言,即使我未指定目录
Path似乎仍在

@Pathros可能与启用递归以及您指定的目录有关。换句话说,递归确实以这种方式改变了事情。
Pryftan '18年

@Pathros哦,如果-搜索字符串中有任何s,您首先要传递--给grep。否则会引起有趣的副作用!
Pryftan

13

我对grep如何用'rl'做到如此简单着迷:

grep -rl 'pattern_to_find' /path/where/to/find

-r to recursively find a file / directory inside directories..
-l to list files matching the 'pattern'

使用“ -r”(不带“ l”)来查看文件名,后跟找到模式文本

grep -r 'pattern_to_find' /path/where/to/find

它工作得非常完美...


这也适用于Git Bash(Windows)。
彼得·莫滕森

但这意味着必须搜索每个文件(在文件名或文件扩展名级别上没有过滤器,例如.txt)。还是有办法做到这一点?
彼得·莫滕森

12

要搜索字符串并仅输出带有搜索字符串的那一行:

for i in $(find /path/of/target/directory -type f); do grep -i "the string to look for" "$i"; done

例如:

for i in $(find /usr/share/applications -type f); \
do grep -i "web browser" "$i"; done

要显示包含搜索字符串的文件名:

for i in $(find /path/of/target/directory -type f); do if grep -i "the string to look for" "$i" > /dev/null; then echo "$i"; fi; done;

例如:

for i in $(find /usr/share/applications -type f); \
do if grep -i "web browser" "$i" > /dev/null; then echo "$i"; \
fi; done;

1
与使用相比,我认为只有不足find … -exec grep 'str' {} \;(如果必须使用find)。
phk

1
如果find包含的空格找到的任何文件,这将导致严重破坏..您可能最终grepping得到错误的文件和/或完全丢失正确的文件。仅find ... -exec grep ...在需要使用find..时使用,但在这种情况下grep -r ...就足够了。
shalomb

1
在find to then grep的结果上使用循环的意义是什么?这变得不必要地复杂。
fedorqui'SO停止伤害

12

有一个ack工具可以完全满足您的需求。

http://linux.die.net/man/1/ack

ack -i search_string folder_path/*

您可能会忽略-i区分大小写的搜索


2
这对现有答案有什么补充?已经在三年前提出了这一建议。
fedorqui'SO停止伤害

1
@fedorqui 1)没有管道!2)使用正则表达式3)获取行号,带有相对路径的文件名,突出显示的文本等,这些内容对于搜索后的编辑很有用,例如“ vim + lineno path / file.cpp”将使您正确地找到感兴趣的行。请参阅命令“ ack include \ | hpp”的输出,该命令在我的搜索文件夹和子文件夹下搜索“ include”或“ hpp”关键字。我希望这一点是明确的。这是示例输出(无法用简单的文本显示关键字突出显示)process / child.hpp 11:boost / process / child.hpp process / all.hpp 21:#include <boost / process / execute.hpp>
朋友

12

以前所有的答案都建议grep并查找。但是还有另一种方法:使用Midnight Commander

它是一个免费的实用程序(已有30年的历史,已被时间证明),无需GUI即可看到。它具有大量功能,而查找文件只是其中之一。


护林员也会有同样的想法
nilon

11

下面的命令可以很好地解决此问题:

find ./ -name "file_pattern_name"  -exec grep -r "pattern" {} \;

2
find然后使用的目的是什么grep -r?它们是相同的意思,所以这是多余的。
fedorqui'SO停止伤害

哦!更正了,实际上找到的是在过滤后的文件上运行grep而不是全部,谢谢
Pradeep Goswami 2015年

2
仍然,这没有任何意义,您可以使用进行过滤find
fedorqui'SO停止伤害

11

避免麻烦并安装ack-grep。它消除了很多许可和报价问题。

apt-get install ack-grep

然后转到您要搜索的目录并运行以下命令

cd /
ack-grep "find my keyword"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.