在终端中按掩码获取所有文件的列表

在终端中按掩码获取所有文件的列表

我想找到具有定义掩码的文件夹中的所有*.h,*.cpp文件,例如*/trunk/src*.所以,我可以单独查找*.h*.cpp文件:

find . -path "*/trunk/src/*.h"
find . -path "*/trunk/src/*.cpp" 

*.h获取两种类型(和*.cpp)的文件列表的最佳方法是什么?

PS 我想将列表通过管道传输到grep.

答案1

您可以使用-o“或”:

find . -path '*/trunk/src/*.h' -o -path '*/trunk/src/*.cpp'

这与以下相同

find . -path '*/trunk/src/*' \( -name '*.h' -o -name '*.cpp' \)

如果您想对这些文件运行 grep:

find . \( -path '*/trunk/src/*.h' -o -path '*/trunk/src/*.cpp' \) -exec grep PATTERN {} +

或者

find . -path '*/trunk/src/*' \( -name '*.h' -o -name '*.cpp' \) -exec grep PATTERN {} +

答案2

在 bash 中,打开环球星选项以便**匹配任何级别的子目录。您可以从您的~/.bashrc.还要打开extglob选项来激活 ksh 扩展模式。

shopt -s globstar extglob

然后:

grep PATTERN **/trunk/src/**/*.@(h|cpp)

请注意,当您使用 .bashrc 时,4.2 以下的 bash 版本会遵循指向目录的符号链接**

Zsh 使这变得更容易,您不需要设置任何选项,只需键入

grep PATTERN **/trunk/src/**/*.(h|cpp)

如果命令行太长,并且您在 Linux 或其他使用 GNU grep 的平台上,您可以使用greprecurse 而不是 shell 以节省命令行长度。

grep -R --include='*.cpp' --include='*.h' PATTERN **/trunk/src

相关内容