Когда вы не передаете имя файла в ack, он работает со встроенным набором файлов по умолчанию, который исключает нераспознанные двоичные файлы. Если вы передаете имена файлов, он ищет все файлы, которые вы передаете. Это объясняет разницу между ack fooи ack foo **.
кв 1
В ack 1.x используйте флаг, -aчтобы ack не пропускал файлы, тип которых он не распознает.
Вы можете сделать псевдоним, если вы хотите, чтобы этот флаг чаще, чем нет: добавьте строку alias ack='ack -a'в ваш ~/.bashrcили ~/.zshrc. Если вы установили этот псевдоним и хотите позвонить ackбез опции, вызовите \ack(обратная косая черта отключает расширение псевдонима). На псевдонимы скрипты не влияют, только интерактивные оболочки.
Кроме того, вы можете добавить -aопцию к вашему ~/.ackrc.
Совпадения в двоичных файлах будут перечислены как «совпадения двоичного файла test1». Нет способа отключить это поведение без изменения самого Ack (по крайней мере, добавления плагина).
кв 2
В ack 2.0 -aопция была удалена. Вместо этого вы можете определить тип, соответствующий всем файлам, и использовать -kопцию, чтобы ack включал все файлы этого типа. Обратите внимание, что типы файлов обрабатываются в непредсказуемом порядке, поэтому случайный набор двоичных типов будет обрабатываться как обычный, а не как обычный тип.
ack --type-set='all:match:.*' -k foo
Таким образом, совпадения печатаются даже для файлов, которые в противном случае выглядели бы двоичными. Как и выше, вы можете добавить эти параметры к псевдониму или вашему .ackrc.