我正在尝试设置一个grep命令,它搜索我当前的目录,但是只有当它是根目录时才会排除目录。
因此,对于以下目录,我希望排除#1,并且要包含#2
1) vendor/phpunit
2) app/views/vendor
我最初使用以下命令开始
grep -Ir --exclude-dir=vendor keywords *
我尝试使用^ vendor,^ vendor /,^ vendor / ,^ vendor ,但似乎没有任何工作。
有没有办法用grep做到这一点?我想尝试用一个grep调用来做,但是如果必须的话,我可以将结果传递给第二个grep。
答案 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
它并不完美,但只要您没有任何非常奇怪的文件夹(例如--
或其他名称),它就会涵盖大多数用例。如果你想要更精细的东西,请随意改进它。