Answers:
xargs
期望以其他命令无法产生的格式输入,因此很难有效使用。这里出了问题,您有一个文件,其名称必须在输入时加引号xargs
(可能包含'
)。
如果您的grep支持递归搜索的-r
or -R
选项,请使用它。
grep -r word .
否则,请使用的-exec
主要find
。这是获得与相同效果的通常方法xargs
,但不限制文件名。合理的最新版本find
允许您在一次调用辅助命令的情况下将多个文件分组。传递/dev/null
给grep
,以确保即使碰巧在单个文件上被调用,它也将在每个匹配项的前面显示文件名。
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
在当前目录中,您可以使用grep:
grep -irl root .
我想您想在文件中找到一个字符串
尝试 find . -name "*" | xargs grep -l "string"
/dev/null
。当输出格式可能有所不同时,这很麻烦,具体取决于匹配的文件数...谢谢。