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?
Ответы
Ответ 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