在所有目录中使用grep

21

我有一个名为 XYZ 的目录,其中包含目录 ABC、DEF 和 GHI。我想在所有目录中的所有 *.c 文件中搜索模式“writeText”(即 XYZ、XYZ/ABC、XYZ/DEF 和 XYZ/GHI)。 我可以使用什么 grep 命令?

另外,如果我只想在 XYZ、XYZ/ABC 和 XYZ/GHI 中搜索,而不是在 XYZ/DEF 中搜索,我可以使用什么 grep 命令?

谢谢!


注:grep是一种在Unix和类Unix操作系统上用于文本搜索的命令行实用程序。

1
--recursive--include/--exclude 标志可能是你想要的。 - Wooble
2个回答

44
grep -R --include="*.c" --exclude-dir={DEF} writeFile /path/to/XYZ
  • -R 表示递归,因此它会进入你正在搜索的目录的子目录。
  • --include="*.c" 表示“查找以.c结尾的文件”。
  • --exclude-dir={DEF} 表示“排除名为DEF的目录”。如果要排除多个目录,则可以这样做:--exclude-dir={DEF,GBA,XYZ}
  • writeFile 是你要搜索的模式。
  • /path/to/XYZ 是你想要搜索的目录路径。

请注意,这些标志适用于GNU grep,如果你使用BSD/SysV/AIX grep可能会不同。如果你使用Linux/GNU grep工具,则应该没有问题。


每个参数的解释都很好! - Sean the Bean
如果有另一个类似于XYZ/CCC/DEF的目录,这个命令是否也会排除该目录?但我只想排除XYZ/DEF。@wkl - Yingchun

4
您可以使用以下命令来回答您问题的至少第一部分。
find . -name *.c | xargs grep "writeText"

1
收到以下信息: find . -name *.c | xargs grep "writeText" find: 路径必须在表达式之前 用法:find [路径...] [表达式] - Romonov
我在我的Ubuntu机器上工作。你能否尝试使用“find . -name *.c”命令并分享结果。 - Hakan Serce
同样的信息。我的系统是红帽。 - Romonov
你能否尝试将当前文件夹的名称明确地放在点号的位置来检查吗? - Hakan Serce

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接