Grep --exclude-dir(仅限根目录)

时间:2013-08-07 18:49:27

标签: grep

我正在尝试设置一个grep命令,它搜索我当前的目录,但是只有当它是根目录时才会排除目录。

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

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

我最初使用以下命令开始

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

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

有没有办法用grep做到这一点?我想尝试用一个grep调用来做,但是如果必须的话,我可以将结果传递给第二个grep。

2 个答案:

答案 0 :(得分:1)

使用烟斗:

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

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

答案 1 :(得分:0)

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

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

您可以将它用作grep的替代品,只需将排除的dir作为第一个参数,然后将*保留在结尾处。所以,你的命令看起来像:

grepex vendor -Ir keywords

它并不完美,但只要您没有任何非常奇怪的文件夹(例如--或其他名称),它就会涵盖大多数用例。如果你想要更精细的东西,请随意改进它。