Подтвердить что ты не робот

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?

4b9b3361

Ответ 1

Этот ответ предназначен для версий Ack до 2, см. Этот ответ для версий Ack >= 2.

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

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

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

Ответ 2

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

(Из betterthangrep.com/Changes)

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

ack --version