Buscar TODOS los archivos con ack

14

¿Cómo puedo buscar todos los archivos (incluido el binario) en el directorio actual con ackv2?

Quiero hacer lo mismo que hacer ack 'foo' **, pero solo con un indicador, por lo que funciona si quiero buscar todos los archivos en un directorio específico sin agregarlos **.


Diferencia entre ack 'foo'y 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
Tyilo
fuente
¿Por qué quieres usar ack para esto en lugar de grep?
Andy Lester
1
@AndyLester Solo pensé que eso acksiempre es mejor que grep. Estaba equivocado :).
Tyilo

Respuestas:

6

Por defecto, Ack busca un patrón en todos los archivos no binarios debajo del directorio actual.

Creo que las versiones anteriores de Ack buscarían a través de archivos binarios cuando les --binarypasaras la bandera. Sin embargo, esta bandera ha sido eliminada. Es posible que pueda usar grep en su lugar.

grep -ar 'foo' .

fuente
No tiene nada que ver con enlaces simbólicos. Tiene que ver con archivos binarios!
Tyilo
@Tyilo: he modificado mi respuesta.
13

Cuando no pasa ningún nombre de archivo a ack, funciona en un conjunto de archivos predeterminado incorporado que excluye los archivos binarios no reconocidos. Si pasa nombres de archivo, busca en todos los archivos que pasa. Esto explica la diferencia entre ack fooy ack foo **.

ack 1

En ack 1.x, use la bandera -apara decirle a ack que no omita archivos cuyo tipo no reconoce.

Puede crear un alias si desea ese indicador con mayor frecuencia: agregue la línea alias ack='ack -a'en su ~/.bashrco ~/.zshrc. Si configura este alias y desea llamar acksin la opción, llame \ack(la barra invertida desactiva la expansión del alias). Los scripts no se ven afectados por el alias, solo los shells interactivos.

Alternativamente, puede agregar la -aopción a su ~/.ackrc.

Las coincidencias en archivos binarios se mostrarán como "coincidencias de prueba de archivo binario1". No hay forma de deshabilitar este comportamiento sin modificar el propio Ack (al menos agregar un complemento).

ack 2

En ack 2.0, la -aopción ha sido eliminada. Lo que puede hacer en su lugar es definir un tipo que coincida con todos los archivos, y usar la -kopción para hacer que ack incluya todos los archivos de ese tipo. Tenga en cuenta que los tipos de archivo se procesan en un orden impredecible, ya que esto provocará que un conjunto aleatorio de tipos binarios se procese de forma normal en lugar de como el tipo habitual.

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

De esta forma, las coincidencias se imprimen incluso para archivos que de otro modo se verían binarios. Como se indicó anteriormente, puede agregar estas opciones a un alias o a su .ackrc.

Gilles 'SO- deja de ser malvado'
fuente
1
Eso es muy astuto, @Gilles.
Andy Lester
@AndyLester, ¿por qué se eliminó la opción -a? El "Esto se debe a" en la declaración en realidad no explica por qué ya no puedo buscar tipos de archivos no reconocidos.
Yann Dìnendal
Debido a que el comportamiento de 1.x -a, buscar todos los archivos de texto no reconocidos, ahora es el predeterminado en 2.0.
Andy Lester
2
Extraño, tengo un archivo js minimizado que incluso ese conjunto de tipos especial de coincidencia de todos los tipos no puede encontrar ...
Izkata
Estoy aquí por eso: un texto dentro de un archivo js minimizado, que ack no analiza. Pensé que la respuesta sería como "agregar -a" ... Estoy decepcionado.
Luciano Fantuzzi