首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不同类型的文件中找到

如何在不同类型的文件中找到
EN

Ask Ubuntu用户
提问于 2018-05-15 09:08:16
回答 2查看 66关注 0票数 0

我正在我的Windows-10 PC上开发一个Ubuntu应用程序,uname -a的结果如下:

代码语言:javascript
复制
Linux DOMINIQUEDS 4.4.0-17134-Microsoft #48-Microsoft Fri Apr 27 18:06:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux

我正在进行一些C++开发,我想知道哪些源文件(*.cpp*.h)包含了文件Sample.h,所以我启动了以下命令:

代码语言:javascript
复制
find ./ -name "*.cpp" -or -name "*.h" -exec grep -i "include" {} /dev/null \; | grep "Sample.h"

这似乎行不通:只给出了*.h文件,其中包含了同一行的includeSample.h

但是,我确信,用于查找不同类型文件的-o结构是正确的:

代码语言:javascript
复制
find ./ -name "*.cpp" -or -name "*.h"

=>这里,我得到了一个*.cpp*.h文件的列表。

这给我留下了两种可能性:

  • 要么行为是正确的:-exec参数仅用于最后一个find结果。在这种情况下,有人能告诉我如何对所有的-exec结果执行find吗?
  • 要么这种行为是错误的。在这种情况下,有人知道这是否是一个普遍的Ubuntu问题/Windows-10 Ubuntu应用程序问题/.如果有什么解决方案可以期待的话,什么时候?

提前感谢

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2018-05-15 09:17:53

不过,我确信,用于查找不同类型文件的-o结构是正确的: find ./ -name "*.cpp“-or -name *.h

没错,但-or的优先级并不高。来自man find

代码语言:javascript
复制
   Please note that -a when specified implicitly (for example by two tests
   appearing  without an explicit operator between them) or explicitly has
   higher precedence than -o.  This means that find . -name afile -o -name
   bfile -print will never print afile.

所以:

代码语言:javascript
复制
-name "*.cpp" -or -name "*.h" -exec grep ...

就像:

代码语言:javascript
复制
-name "*.cpp" -or ( -name "*.h" -exec grep ... )

也不像:

代码语言:javascript
复制
( -name "*.cpp" -or -name "*.h" ) -exec grep ...

你需要:

代码语言:javascript
复制
find . \( -name '*.cpp' -o -name '*.h' \) -exec grep -H '#include.*Sample\.h' {} +

(我猜想您使用/dev/null来使grep打印文件名?) -H选项做到这一点。)

票数 2
EN

Ask Ubuntu用户

发布于 2018-05-15 10:36:10

用现代的grep,你根本不需要find

代码语言:javascript
复制
grep -r --include='*.cpp' --include='*.h' 'include' . | grep 'Sample\.h'

或者更好(考虑到搜索词的顺序是明确的)

代码语言:javascript
复制
grep -r --include='*.cpp' --include='*.h' 'include.*Sample\.h' .
票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1036433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档