ack:只排除一个目录,但保留所有其他目录

mat*_*ndr 49 ack

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

/app
/app/data
...
/app/secondary
/app/secondary/data
Run Code Online (Sandbox Code Playgroud)

我想递归搜索/app,包括/app/data.但我不想搜索/app/secondary/data.这就是我到目前为止:

ack --ignore-dir=data searchtext
ack --ignore-dir=secondary/data searchtext
Run Code Online (Sandbox Code Playgroud)

第一个命令忽略两个目录,第二个命令忽略它们.在app文件夹中,我的ack命令应该是什么样的?

Eri*_*ing 52

较旧版本的ack只能获取文件夹名称,而不是文件夹路径.从版本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
Run Code Online (Sandbox Code Playgroud)

(来自betterthangrep.com/Changes)

您可以查看您拥有的版本--version:

ack --version
Run Code Online (Sandbox Code Playgroud)


rku*_*lla 24

这个答案适用于2之前的Ack版本,请参阅Ack版本的答案> = 2.

第一个是忽略它们,因为它们都有'data'作为子目录,ack默认搜索sub-dirs.因此它将忽略具有该名称的任何子目录.不幸的是,你的第二种方式也不起作用.这对我有用:

ack -a searchtext -G '^(?!.*secondary/data.*).*$'
Run Code Online (Sandbox Code Playgroud)

而不是-a搜索所有文件,请参阅ack-grep --help = types以仅搜索某些文件类型,例如--type = text

  • ```$ ack -G Option'-G'在ack 2```中无效 (3认同)