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

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

我想递归搜索 /app ,包括 /app/data 。但是,我不想搜索 /app/secondary/data。这是我到目前为止所拥有的:
ack --ignore-dir=data searchtext
ack --ignore-dir=secondary/data searchtext

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

最佳答案

此答案适用于 2 之前的 Ack 版本,请参阅 This answer for versions of Ack >=2

第一个忽略两者,因为它们都将“数据”作为子目录,并且默认情况下 ack 搜索子目录。因此它将忽略具有该名称的任何子目录。不幸的是,您的第二种方法也不起作用。这对我有用:

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

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

关于ack:只排除一个目录,但保留所有其他同名目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2799570/

10-13 09:21