如何在Linux中的目录的整个内容中搜索单词

xyz*_*xyz 20 linux shell grep find xargs

需要在整个内容中搜索某些内容

我在尝试:

find . | xargs grep word
Run Code Online (Sandbox Code Playgroud)

我得到错误:

xargs:未终止的报价

如何实现这一目标?

Gil*_*il' 23

xargs期望以其他命令无法生成的格式输入,因此很难有效使用。这里的问题是您有一个文件,其名称必须在输入时引用xargs(可能包含 a ')。

如果您的 grep 支持递归搜索的-ror-R选项,请使用它。

grep -r word .
Run Code Online (Sandbox Code Playgroud)

否则,使用 的-exec主要部分find。这是实现与 相同效果的常用方法xargs,但对文件名没有限制。合理的最新版本find允许您在一次调用辅助命令时将多个文件分组。传递/dev/nulltogrep确保它会在每个匹配项前面显示文件名,即使它碰巧在单个文件上调用。

find . -type f -exec grep word /dev/null {} +
Run Code Online (Sandbox Code Playgroud)

较旧版本的find(在较旧的系统或 OpenBSD 上,或简化的实用程序,例如 BusyBox)一次只能在一个文件上调用辅助命令。

find . -type f -exec grep word /dev/null {} \;
Run Code Online (Sandbox Code Playgroud)

某些版本的findxargs具有允许它们正确通信的扩展名,使用空字符来分隔文件名,因此不需要引用。如今,只有 OpenBSD 具有此功能而没有-exec … {} +.

find . -type f -print0 | xargs -0 grep word /dev/null
Run Code Online (Sandbox Code Playgroud)


Fei*_*ila 12

我猜你是说第一个选项

grep 递归,用于搜索文件内的内容

grep -R "content_to_search" /path/to/directory
Run Code Online (Sandbox Code Playgroud)

ls 递归,用于搜索匹配的文件

ls -lR | grep "your_search"
Run Code Online (Sandbox Code Playgroud)