如何在没有 -r 开关的情况下使用 grep 在父文件夹的子文件夹中的文件中查找文本字符串

Dem*_*eep 6 grep solaris recursive posix

我正在使用 Solaris 10 并且有两个grep版本/usr/bin,一个在/usr/xpg4/bin. 我一直在寻找有关如何使用grep. 所有答案谈论-r-R不具有可用于我的版本的I开关grep

cuo*_*glm 16

标准 (POSIX) 语法是:

find /path/to/parent -type f -exec grep 'XXX' /dev/null {} +
Run Code Online (Sandbox Code Playgroud)

(这/dev/null是为了确保grep始终打印文件名)。这将适用于包括 Solaris 在内的所有 POSIX 系统。唯一已知的已知不起作用的 90 后系统是旧的(现在很旧)GNU 系统。

GNU 最初引入了一个-print0谓词和一个-0选项来xargs代替:

find /path/to/parent -type f -print0 | xargs -0 grep 'XXX' /dev/null
Run Code Online (Sandbox Code Playgroud)

现在有一些其他实现支持它,但不支持 Solaris。

以上,理论上,如果没有文件,您需要添加-r避免运行的选项grep,但这不是可移植的,在这种特殊情况下,不会产生功能差异