ack:只包含一个目录,但保留所有其他目录

我的文件夹结构如下所示:

/app /app/data ... /app/secondary /app/secondary/data 

我想recursionsearch/app ,包括/app/data 。 但是我不想search/app/secondary/data 。 这是我迄今为止:

 ack --ignore-dir=data searchtext ack --ignore-dir=secondary/data searchtext 

第一个命令忽略了这两个目录,第二个命令忽略了这两个目录。 从应用程序文件夹中,我的ack命令应该是什么样子?

此答案适用于2之前的Ack版本,请参阅Ack> = 2版本的此答案 。

第一个是忽略两者,因为它们都有“数据”作为子目录,缺省情况下,acksearch子目录。 所以它会忽略这个名字的任何子目录。 不幸的是,你的第二种方式也行不通。 这适用于我:

 ack -a searchtext -G '^(?!.*secondary/data.*).*$' 

而不是-asearch所有文件,请参阅ack-grep –help = types仅search某些文件types,例如–type = text

旧版本的ack只能使用文件夹名称,而不能使用文件夹path。 从版本1.93_02开始,他们已经在

 1.93_02 Wed Oct 6 21:39:58 CDT 2010 [ENHANCEMENTS] The --ignore-dir option now can ignore entire paths relative to your current directory. Thanks to Nick Hooey. For example: ack --ignore-dir=t/subsystem/test-data 

(来自betterthangrep.com/Changes )

你可以检查你的版本--version

 ack --version