我正在寻找服务器上包含文本字符串的文件"sometext"
,但我想排除在/var/www/sometext
文件夹(及其子文件夹)中的搜索。
所以我做了以下事情:
grep -rl "sometext" / --exclude-dir=/var/www/sometext
然而,存在两个问题:
结果仍然包含我想要排除的文件夹中的文件,并且
grep
最终挂起(下图)
我的问题:
为什么会
grep
返回我想要排除的文件夹内的文件?为什么会
grep
挂起?而且挂起之后,我该如何再次获得提示?附加问题:在排除文件夹规范中添加尾随星号会如何改变结果
--exclude-dir=/var/www/sometext*
?
答案1
问题 1 和问题 3 是相关的,可以一次回答。根据grep
手册页(重点是我的):
–exclude-dir=DIR
排除符合以下条件的目录模式目录来自递归搜索。
因此基本上你用该选项指定的是图案而不是目录本身,这意味着/var/www/sometext*
甚至/var/www/sometext/*
会扩展并匹配指定的任何文件/子目录(第二个更准确,因为第一个可以匹配名称以 开头的其他目录sometext
。
问题 2 可以解释,因为您可能正在grep
ping/dev
目录内,该目录包含系统的所有设备,特别是其中一些设备被视为“无限”,例如,因此命令永远不会结束。使用来匹配所有特殊目录(如等)/dev/zero
是个好主意。--exclude-dir
/dev
/sys