Pesquisar TODOS os arquivos com ack

13

Como posso pesquisar todos arquivos (incluindo binário) no diretório atual com ack v2?

Eu quero fazer o mesmo que fazer ack 'foo' ** , mas apenas com um sinalizador, então funciona se eu quiser pesquisar todos os arquivos em um diretório específico sem acrescentar ** .

Diferença entre ack 'foo' e 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
    
por Tyilo 22.07.2013 / 21:02

2 respostas

5

Por padrão, o Ack procura um padrão em todos os arquivos não binários abaixo do diretório atual.

Acredito que versões mais antigas do Ack pesquisariam arquivos binários quando você passasse eles o --binary flag. Este sinalizador foi removido embora. Você pode ser capaz de use grep em vez disso.

grep -ar 'foo' .
    
por 23.07.2013 / 02:39
12

Quando você não passa nenhum nome de arquivo para ack, ele opera em um conjunto de arquivos padrão 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 foo e ack foo ** .

ack 1

No ack 1.x, use o sinalizador -a para informar à ack para não ignorar arquivos cujo tipo não reconhece.

Você pode criar um alias se desejar esse sinalizador com mais frequência: adicione a linha alias ack='ack -a' em ~/.bashrc ou ~/.zshrc . Se você configurar esse alias e quiser chamar ack sem a opção, chame \ack (a barra invertida desativa a expansão de alias). Os scripts não são afetados pelo alias, apenas shells interativos.

Como alternativa, você pode adicionar a opção -a ao seu ~/.ackrc .

As correspondências nos arquivos binários serão listadas como “Correspondências do test1 do arquivo binário”. Não há como desabilitar esse comportamento sem modificar o próprio Ack (pelo menos adicionando um plugin).

ack 2

No ack 2.0, a opção -a foi removida. O que você pode fazer é definir um tipo que corresponda a todos os arquivos e usar a opção -k 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, fazendo com que um conjunto aleatório de tipos binários seja processado como normal, em vez de como o tipo usual.

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

Dessa forma, as correspondências são impressas até 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 .

    
por 23.07.2013 / 03:35

Tags