ack: исключая только один каталог, но сохраняя все остальные с тем же именем

Моя структура папок выглядит так:

/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

Первая команда игнорирует оба каталога, а вторая - ни один из них. Как должна выглядеть моя команда ack из папки приложения?

2 ответа

Решение

Этот ответ для версий Ack до 2, см. Этот ответ для версий Ack> = 2.

Первый игнорирует оба, потому что они оба имеют "данные" в качестве подкаталога и ack ищет подкаталоги по умолчанию. Таким образом, он будет игнорировать любой вложенный каталог с таким именем. К сожалению, ваш второй способ тоже не работает. Это работает для меня:

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

Вместо -a для поиска всех файлов, смотрите ack-grep --help =types для поиска только определенных типов файлов, например --type =text

Старые версии 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

(От http://betterthangrep.com/Changes)

Вы можете проверить, какая версия у вас есть с --version:

ack --version
Другие вопросы по тегам