Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grep--排除目录(仅根目录)_Grep - Fatal编程技术网

Grep--排除目录(仅根目录)

Grep--排除目录(仅根目录),grep,Grep,我正在尝试设置一个grep命令,该命令搜索我的当前目录,但仅当它是根目录时才排除一个目录 因此,对于以下目录,我希望排除#1,包括#2 1) vendor/phpunit 2) app/views/vendor 我最初是从下面的命令开始的 grep -Ir --exclude-dir=vendor keywords * 我尝试使用^vendor、^vendor/、^vendor/、^vendor/,但似乎没有任何效果 有没有办法让grep做到这一点?我想尝试通过一个grep调用来实现这一点,

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

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

1) vendor/phpunit
2) app/views/vendor
我最初是从下面的命令开始的

grep -Ir --exclude-dir=vendor keywords *
我尝试使用^vendor、^vendor/、^vendor/、^vendor/,但似乎没有任何效果

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

使用管道:

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

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

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

function grepex(){
    excludedir="$1"
    shift;
    for i in *; do
        if [ "$i" != "$excludedir" ]; then
            grep $@ "$i"
        fi
    done
}
您使用它作为grep的替换,只需将excluded dir作为第一个参数,并将*保留在末尾。因此,您的命令如下所示:

grepex vendor -Ir keywords

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

这是无用的-它实际上并不排除目录,它只是忽略结果。假设您有一个总容量为几mb的目录树,其中只有一个gb文件夹。您能想象一下为什么要从搜索中排除该文件夹吗?