我是Linux终端的新手;使用Ubuntu Peppermint 5。
我希望在文件名中具有给定文件扩展名(例如'* .doc')的所有文件中递归搜索所有目录中的给定文本字符串(例如'mystring');然后显示所有匹配项的文件名和绝对文件路径列表。我不需要看到任何内容。
这一定是个常见问题。我希望能找到一种快速有效地进行搜索的解决方案,并且记忆简单并输入终端。
我尝试过使用'cat','grep','find'和'locate'以及各种选项,并以不同的组合方式进行管道连接,但我还没有找到办法完成上述操作。
讨论了类似的事情: How to show grep result with complete path or file name
但是我无法想办法让这些方法适应上述情况,并对任何建议表示感谢。
答案 0 :(得分:1)
根据grep
手册,您可以使用--include
选项执行此操作(如果您只想要名称,则可以使用-l
选项 - 我通常使用-n
显示行号:
<强>
--include=
水珠 强>使用
--exclude
中所述的通配符匹配,仅搜索名称与 glob 匹配的文件。<强>
-l
强><强>
--files-with-matches
强>抑制正常输出;而是打印通常打印输出的每个输入文件的名称。每个文件的扫描在第一场比赛时停止。 (
-l
由POSIX指定。)
一个合适的 glob 将是“* .doc”(确保引用它,以允许shell将传递给 grep
)。 / p>
GNU grep还有一个递归选项-r
(不在POSIX grep中)。与globbing一起,您可以搜索“.doc”文件的目录树,如下所示:
grep -r -l --include="*.doc" "mystring" .
如果你想让它变得便携,那么就可以开始find
了。但是使用grep
的扩展名可以使搜索速度更快,并且可以在任何Linux平台上使用。
答案 1 :(得分:1)
找到。 -name'* .doc'-exec grep -l'mystring'{} \; -print
工作原理:
从给定路径.
表示名称为'*.doc'
-exec grep
对找到的文件执行grep
禁止grep -l
并在文件中搜索'mystring'
grep的表达式以{} \;
和-print
打印出grep创建mystring
的所有名称。
编辑:
要仅获取当前目录的结果而不进行递归,您可以添加:
-maxdepth 0
找到。