4

foo我想在目录中搜索一个字符串app,但不包括文件名中包含migrations的任何文件。我希望这个grep命令能够工作

grep -Ir --include "*.py" --exclude "*migrations*" foo app/

上面的命令似乎忽略了--exclude过滤器。作为替代方案,我可以做

grep -Ir --include "*.py" foo app/ | grep -v migrations

这行得通,但这会foo在结果中失去突出显示。我也可以find加入其中并保持突出显示。

find app/ -name "*.py" -print0 | xargs -0 grep --exclude "*migrations*" foo

我只是想知道我是否遗漏了有关将命令行参数组合到 grep 的内容,或者它们是否根本不能一起工作。

4

2 回答 2

3

我在 .py 文件上寻找一个术语,但不想扫描迁移文件,所以我发现(对于 grep 2.10)如下(我希望这会有所帮助):

grep -nR --include="*.py" --exclude-dir=migrations whatever_you_are_looking_for . 
于 2014-08-07T16:09:59.640 回答
0

man grep说:

       --include=GLOB
          Search only files whose base name  matches  GLOB  (using  wildcard  matching  as  described  under
          --exclude).

因为它在那里说“只有”,我猜你的--include陈述正在压倒你的--exclude陈述。

于 2013-01-08T19:02:07.157 回答