ack: Exclude specific directories from search via regex

后端 未结 4 821
小蘑菇
小蘑菇 2021-02-01 16:31

How do I ignore specific directories via RegEx with ack?

I can use the --ignore-dir option, but this does not let me specify a RegEx. I want to be able to i

相关标签:
4条回答
  • 2021-02-01 17:12

    With ack2, it seems you can't use holygeek's solution.

    Here's how I'd do it using -v and -x:

    ack -v -g 'test' | ack -x pattern
    

    More generally, 'test' can be a regex for dirs to exclude

    0 讨论(0)
  • 2021-02-01 17:13

    Use the undocumented option "--invert-file-match" (ack version on my system: 1.96):

    $ ack pattern -G 'test|tests' --invert-file-match
    

    Well, it is sort of documented:

    $ ack --help|grep invert
    -v, --invert-match    Invert match: select non-matching lines
    --invert-file-match   Print/search handle files that do not match -g/-G.
    

    It is not documented in its perldoc.

    0 讨论(0)
  • 2021-02-01 17:16

    In recent versions of ack, you can use regular expressions with --ignore-dir.

    From this thread:

    Yes, in 2.15_01 we added:

    • ack now supports --ignore-dir=match:.... Thanks, Ailin Nemui! (GitHub ticket #42)

    GitHub link: https://github.com/petdance/ack2/issues/42

    Sadly, I think this only supports matching the base directory name, not the full path.

    For instance, you cannot match a path like ".*/docs/generated/.*" with it.

    For that, see the GitHub issue 291.

    update for 2020: it looks like this is now moved to ack3 (github issue).

    0 讨论(0)
  • 2021-02-01 17:23

    In the interest of folks using a pre-1.96 version of ack (like me), you can use regex look around to do this. Here's an example:

    ack --java 'text-pattern' -G '^((?!(test|target)).)*$'
    

    This will search the text-pattern in all Java files recursively (from .) that DO NOT have the words test or target in their path.

    0 讨论(0)
提交回复
热议问题