需要在整个内容中搜索某些内容
我在尝试:
find . | xargs grep word
我收到错误:
xargs:未终止的引号
如何实现这一目标?
答案1
xargs
期望输入采用其他命令无法生成的格式,因此很难有效使用。这里的问题是你有一个文件,其名称必须在输入时引用xargs
(可能包含'
)。
如果您的 grep 支持-r
或-R
选项进行递归搜索,请使用它。
grep -r word .
否则,使用 的-exec
主要部分find
。这是实现与 相同效果的常用方法xargs
,但对文件名没有限制。合理的最新版本find
允许您在对辅助命令的一次调用中对多个文件进行分组。传递/dev/null
togrep
确保它将在每个匹配项前面显示文件名,即使它碰巧在单个文件上调用。
find . -type f -exec grep word /dev/null {} +
旧版本find
(在旧系统或 OpenBSD 上,或简化的实用程序,如 BusyBox)一次只能对一个文件调用辅助命令。
find . -type f -exec grep word /dev/null {} \;
find
和的某些版本xargs
具有允许它们正确通信的扩展名,使用空字符分隔文件名,以便不需要引用。如今,只有 OpenBSD 有此功能,而没有-exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
答案2
我猜你的意思是第一个选项
grep 递归,用于搜索文件内的内容
grep -R "content_to_search" /path/to/directory
ls 递归,用于搜索匹配的文件
ls -lR | grep "your_search"
答案3
如果您有 GNU 工具(如果 Linux 标签准确的话您就可以这样做),那么您可以使用-print0
和-0
来解决常见的引用问题:
find . -type f -print0 | xargs -0 grep word
答案4
在当前目录中您可以使用 grep:
grep -irl root .