Quando você não passa um nome de arquivo para confirmação, ele opera em um conjunto de arquivos padrão interno que exclui arquivos binários não reconhecidos. Se você passar nomes de arquivos, ele procurará em todos os arquivos que você passar. Isso explica a diferença entre ack fooe ack foo **.
ack 1
No ack 1.x, use o sinalizador -apara informar ao ack para não ignorar arquivos cujo tipo ele não reconhece.
Você pode criar um alias se desejar que o sinalizador seja mais frequente: adicione a linha alias ack='ack -a'no seu ~/.bashrcou ~/.zshrc. Se você configurar esse alias e quiser chamar acksem a opção, ligue \ack(a barra invertida desativa a expansão do alias). Os scripts não são afetados pelo alias, apenas shells interativos.
Como alternativa, você pode adicionar a -aopção ao seu ~/.ackrc.
As correspondências nos arquivos binários serão listadas como "Correspondências nos arquivos binários test1". Não há como desativar esse comportamento sem modificar o próprio Ack (pelo menos adicionar um plug-in).
ack 2
No ack 2.0, a -aopção foi removida. O que você pode fazer é definir um tipo que corresponda a todos os arquivos e usar a -kopção para fazer com que o ack inclua todos os arquivos desse tipo. Observe que os tipos de arquivo são processados em uma ordem imprevisível, pois isso fará com que um conjunto aleatório de tipos binários seja processado como normal, em vez do tipo usual.
ack --type-set='all:match:.*' -k foo
Dessa forma, as correspondências são impressas mesmo para arquivos que, de outra forma, pareceriam binários. Como acima, você pode adicionar essas opções a um alias ou ao seu .ackrc.