使用 linux find 命令来识别 (A) 匹配两个名称(带通配符)和 (B) 也包含字符串的文件

Using linux find command to identify files that (A) match either of two names (with wildcards) and (B) that also contain a string

find 命令对于识别具有给定名称且其中某处还包含字符串的文件非常有用。

例如,假设我正在当前目录某处的 R markdown 文件中查找字符串 "pacf("

find . -name "*.Rmd" -exec grep -ls "pacf(" {} \;

我得到了有用的结果。

但是,有时我不确定我要查找的文件是 .R 文件还是 .Rmd 文件,所以我也可能 运行.

find . -name "*.R" -exec grep -ls "pacf(" {} \;

假设没有包含此字符串的 R 文件,因此 returns 什么都没有。

我想做的是在 .R.Rmd 文件中查找此字符串。我想我可以 运行

find . -name "*.Rmd" -o -name "*.R" -exec grep -ls "pacf(" {} \

但是那个returns没有结果。

但是如果我运行

find . -name "*.R" -o -name "*.Rmd" -exec grep -ls "pacf(" {} \

我得到的结果与搜索 .Rmd 文件的结果相同。所以它似乎只是 运行 为第二组文件执行 exec 中的内容。

有什么方法可以更改这些命令以同时查看 .R.Rmd 文件?

你可以为 -name 传递 "*[.Rmd]" 像这样

find . -name "*[.Rmd]" -exec grep -ls "pacf(" {} \;

添加括号'()'

find . \( -name '*.R' -o -name '*.Rmd' \) -exec grep -ls "pacf(" {} \;