我们有一个相当庞大而复杂的文件系统,我正在尝试生成包含特定文本字符串的文件列表。这应该很简单,但我需要排除"./svn"和"./pdv"目录(以及可能的其他目录),并且只查看*.p、*.w或.i类型的文件。
我可以用程序轻松完成这个任务,但运行速度非常慢。我想加快这个过程(以便不重复搜索数千个文件),因为我需要根据长列表运行此类搜索条件。
通常,我们使用以下方式搜索文件系统:
这个是可行的,但我随后必须使用一个程序来排除不需要的目录,所以它运行得非常缓慢。
在查看这里的主题之后: Stack Overflow thread 我决定尝试一些其他的方法:
排除 './svn' 目录,但不排除 './pdv' 目录,不限制所查看的文件。
我可以用程序轻松完成这个任务,但运行速度非常慢。我想加快这个过程(以便不重复搜索数千个文件),因为我需要根据长列表运行此类搜索条件。
通常,我们使用以下方式搜索文件系统:
find . -name "*.[!r]*" -exec grep -i -l "search for me" {} \;
这个是可行的,但我随后必须使用一个程序来排除不需要的目录,所以它运行得非常缓慢。
在查看这里的主题之后: Stack Overflow thread 我决定尝试一些其他的方法:
grep -ilR "search for me" . --exclude ".svn" --excluse "pdv" --exclude "!.{p,w,i*}"
排除 './svn' 目录,但不排除 './pdv' 目录,不限制查看的文件。
grep -ilR "search for me" . --exclude ".svn" --excluse "pdv" --include "*.p"
排除 './svn' 目录,但不排除 './pdv' 目录,不限制所查看的文件。
find . -name "*.[!r]*" -exec grep -i -l ".svn" | grep -i -l "search for me" {} \;
我甚至无法成功运行这个程序(或它的变种)。
find . ! -name "*.svn*" -prune -print -exec grep -i -l "search for me" {} \;
没有返回任何内容。看起来它会在找到 .svn 目录后停止。
--excluse "pdv"
(注意拼写错误s/d)在两种情况下都存在,你抱怨这个特定条件不起作用...只是检查一下,拼写错误不是主要问题。 - geronimegrep -ilR "run" . --exclude ".svn" --exclude "pdv" --exclude "!.{p,w,i*}"
。不幸的是,由于结果集现在包括.svn/text-base/jr83144.p.svn-base
和pdv/cm/backupds.i
,我认为这并没有起作用。非常感谢。 - Colin--exclude-dir
参数?我认为这实际上就是问题所在。请参考grep
的手册。 - geronime