ack: исключить определенные каталоги из поиска через регулярное выражение - PullRequest
24 голосов
/ 29 декабря 2011

Как игнорировать определенные каталоги через RegEx с ack ?

Я могу использовать опцию --ignore-dir, но это не позволяет мне указать RegEx. Я хочу иметь возможность игнорировать любой каталог, в имени которого есть слова test или tests или более сложные шаблоны.

Я также пробовал негативно смотреть через

ack -G '(?<!test)' pattern

но это не работает. Он не исключает каталоги test.

Ответы [ 4 ]

21 голосов
/ 29 декабря 2011

Используйте недокументированную опцию "--invert-file-match" (ack версия в моей системе: 1.96):

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

Ну, это как-то задокументировано:

$ 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.

Это не задокументировано в его perldoc.

10 голосов
/ 20 сентября 2013

С ack2 кажется вы не можете использовать решение holygeek.

Вот как я это сделаю, используя -v и -x:

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

В общем, 'test' может быть регулярным выражением для исключаемых директорий

5 голосов
/ 21 августа 2012

В интересах людей, использующих версию ack до 1.96 (как я), вы можете использовать регулярные выражения, чтобы сделать это. Вот пример:

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

Это будет искать text-pattern во всех Java файлах рекурсивно (от.), Которые НЕ имеют слов test или target в своем пути.

2 голосов
/ 15 марта 2017

В последних версиях ack вы можете использовать регулярные выражения с --ignore-dir.

От этой темы :

Да, в 2.15_01 мы добавили:

  • ack теперь поддерживает --ignore-dir = match: .... Спасибо, Айлин Немуи! (GitHub билет № 42)

Ссылка на GitHub: https://github.com/petdance/ack2/issues/42

К сожалению, я думаю, что это поддерживает только сопоставление базового имени каталога, а не полного пути.

Например, вы не можете сопоставить путь, подобный ".*/docs/generated/.*", с ним.

Об этом см. (Все еще открытый) выпуск GitHub 291 .

...