4

我正在尝试设置一个 grep 命令,该命令搜索我的当前目录,但不包括一个目录,前提是它是根目录。

因此,对于以下目录,我希望排除 #1,并包含 #2

1) vendor/phpunit
2) app/views/vendor

我最初是从以下命令开始的

grep -Ir --exclude-dir=vendor keywords *

我尝试使用 ^vendor, ^vendor/, ^vendor/ , ^vendor,但似乎没有任何效果。

有没有办法用 grep 做到这一点?我想尝试通过一个 grep 调用来完成,但如果必须,我可以将结果通过管道传输到第二个 grep。

4

2 回答 2

1

使用管道:

grep -Ir keywords * | grep -v '^vendor/'

问题是,它在进入目录之前测试目录的名称而不是路径,因此无法根据深度exclude-dir区分两个目录。vendor

于 2013-08-08T00:47:50.287 回答
0

这是一个更好的解决方案,它实际上会忽略指定的目录:

function grepex(){
    excludedir="$1"
    shift;
    for i in *; do
        if [ "$i" != "$excludedir" ]; then
            grep $@ "$i"
        fi
    done
}

您可以将其用作 grep 的替代品,只需将排除的目录作为第一个参数,并将 * 放在末尾即可。因此,您的命令如下所示:

grepex vendor -Ir keywords

它并不完美,但只要您没有任何非常奇怪的文件夹(例如名称类似--或其他名称),它将涵盖大多数用例。如果您想要更详细的内容,请随时对其进行改进。

于 2014-09-01T14:32:52.547 回答