Поиск всех файлов с помощью ack

Как я могу искать все файлы (включая двоичные) в текущем каталоге с помощью ack v2?

Я хочу сделать то же самое, что делать ack 'foo' ** , но только с флагом, поэтому он работает, если я хочу искать все файлы в определенном каталоге без добавления ** .


Разница между ack 'foo' и ack 'foo' ** :

 $ mkdir test && cd test $ printf '\x00\x01foo1\x00' > test1 $ printf 'foo2' > test2 $ ack 'foo' test2 1:foo2 $ ack 'foo' ** test1 1:foo1 test2 1:foo2 

    По умолчанию Ack ищет шаблон во всех недвоичных файлах под текущим каталогом.

    Я считаю, что старые версии Ack будут искать через двоичные файлы, когда вы передавали им флаг --binary . Однако этот флаг был удален. Вместо этого вы можете использовать grep.

     grep -ar 'foo' . 

    Когда вы передаете имя файла в ack, он работает со встроенным набором файлов по умолчанию, который исключает нераспознанные двоичные файлы. Если вы передаете имена файлов, он ищет во всех файлах, которые вы передаете. Это объясняет разницу между ack foo и ack foo ** .

    ack 1

    В ack 1.x используйте флаг -a чтобы сказать ack, чтобы не пропускать файлы, тип которых он не распознает.

    Вы можете сделать псевдоним, если хотите этот флаг чаще всего: добавьте alias ack='ack -a' строки alias ack='ack -a' в ваш ~/.bashrc или ~/.zshrc . Если вы настроили этот псевдоним и хотите вызвать ack без опции, вызовите \ack (обратная косая черта отключает расширение псевдонима). Псевдоним не влияет на скрипты, а только на интерактивные оболочки.

    Кроме того, вы можете добавить параметр -a в ваш ~/.ackrc .

    Матчи в двоичных файлах будут указаны как «Бинарный файл test1 matches». Невозможно отключить это поведение без изменения самого Ack (по крайней мере, добавления плагина).

    ack 2

    В ack 2.0 опция -a была удалена. Вместо этого вы можете определить тип, соответствующий всем файлам, и использовать параметр -k чтобы make ack включал все файлы этого типа. Обратите внимание, что типы файлов обрабатываются в непредсказуемом порядке, что приведет к тому, что случайный набор двоичных типов будет обрабатываться как обычный, а не как обычный тип.

     ack --type-set='all:match:.*' -k foo 

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