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