grep -r 不可用;现在怎么办?

grep -r not available; what now?

我正在尝试递归搜索当前文件夹中包含的所有文件中的字符串,我正在其中执行 grep。但是这台主机上的 grep 似乎太旧了。下面是它的一些用法。

>> grep -r "some string here" *.*
grep: illegal option -- r
usage: grep [-E|-F] [-c|-l|-q] [-bhinsvwx] -e pattern_list...
        [-f pattern_file...] [file...]
usage: grep [-E|-F] [-c|-l|-q] [-bhinsvwx] [-e pattern_list...]
        -f pattern_file... [file...]
usage: grep [-E|-F] [-c|-l|-q] [-bhinsvwx] pattern [file...]

那么我应该怎么做呢?

假设您有 find,

find . -type f -exec grep "some string here" {} \;

另请注意,您的通配符只会匹配名称中包含点的文件;我认为这是一个错误,但如果不是,请在 -exec 之前添加 -name '*.*' (或者如果您打算搜索名称包含点的目录,请将 find . 更改为 find *.*,这就是您的 grep 命令实际执行的操作。

旧的 DOS 8+3 通配符 *.* 将匹配所有文件,因为即使在没有扩展名的文件名中,点也是隐含的。所有文件(不以点开头)的 Unix 通配符只是 *.

使用 xargs 或支持 -exec ... +

的更新的 find 可以提高效率