ack: Excluding only one directory but keeping all others with the same name

时间秒杀一切 提交于 2019-12-04 14:56:52

问题


My folder structure looks like this:

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

I want to recursively search /app, including /app/data. I do not want to search /app/secondary/data however. This what I have so far:

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

The first command is ignoring both directories and the second one is ignoring neither of them. From within the app folder, what should my ack command look like?


回答1:


This answer is for versions of Ack prior to 2, see This answer for versions of Ack >=2.

The first one is ignoring both because they both have 'data' as a sub-directory and ack searches sub-dirs by default. So it will ignore any sub-dir with that name. Unfortunately, your second way doesn't work either. This works for me:

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

Instead of -a to search all files, see ack-grep --help=types to search for only certain file types, eg --type=text




回答2:


The older versions of ack can only take the folder name, not the folder path. As of version 1.93_02, they've added this ability in:

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

(From betterthangrep.com/Changes)

You can check which version you have with --version:

ack --version


来源:https://stackoverflow.com/questions/2799570/ack-excluding-only-one-directory-but-keeping-all-others-with-the-same-name

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!