Ack - Ignorando múltiples directorios sin repetir la bandera

¿Es posible ignorar múltiples directorios en Ack sin repetir el indicador?

p.ej. Sé que el siguiente funciona (es decir, establecer múltiples indicadores):

ack --ignore-dir=install --ignore-dir=php 'teststring'

Esperaba poder separar directorios con comas, como puedo hacer con las extensiones de la siguiente manera:

ack --ignore-file=ext:css,scss,orig 'teststring'

Sin embargo, el siguiente indicador de ignorar separado por comas no funciona:

ack --ignore-dir=install,php 'textstring'

¿Es posible usar algún equivalente de mano corta, así que no tengo que escribir repetidamente el distintivo --ignore-dir?

0

4 Respuestas

Como está utilizando ack 2, puede poner - ignore-dir = install y - ignore-dir = PHP en un archivo .ackrc en la raíz de su proyecto. Entonces, cada invocación ack en ese árbol usará esas banderas.

0
agregado

Un enfoque podría ser seleccionar esos directorios para excluir con una expresión regular en la opción -G complementada con la opción - invert-file-match . Basado en su pregunta, algo como lo siguiente:

ack -a -G 'install|php' --invert-file-match 'textstring' .
0
agregado
Interesante, pero no creo que esto sea viable en Ack 2. Recibo el siguiente mensaje: La opción '-a' no es válida en ack 2 Esto es porque ahora tenemos -k/- tipos conocidos que hace que solo seleccione archivos de tipos conocidos, en lugar de cualquier archivo de texto (que es el comportamiento de ack 1.x). Puede tener opciones en .ackrc, o en la variable de entorno ACKRC_OPTIONS. Intenta usar el indicador --dump
agregado el autor SparrwHawk, fuente
La solución de @Birei solo funciona en ack 1.x. Los indicadores -a y -G se han eliminado en ack 2 a favor de la bandera -x.
agregado el autor Andy Lester, fuente

De hecho, es similar a cómo se especifican los patrones de inclusión para grep :

ack --ignore-dir={dir_a,dir_b}

Sin embargo, este formato no funciona con un solo directorio. Asi que

ack --ignore-dir={log}

no trabajará.

0
agregado
@AgentLiquid No lo sabía. ¡Gracias! :)
agregado el autor Mandar Pathak, fuente
También es importante señalar que, dado que la expansión de llaves es una función específica de bash, no podrás aprovecharla en tu archivo .ackrc . En su lugar, deberá enumerar cada opción de - ignore-dir = individualmente.
agregado el autor wpcarro, fuente
Tenga en cuenta que la sintaxis {} causa una expansión de bash, no es específica de ack. Intenta esto en tu línea de comando: echo this is cool {1,2}
agregado el autor AgentLiquid, fuente

Por lo tanto, para ignorar el uso de un solo directorio

ack  --ignore-dir=dir_a

e ignorar el uso de múltiples directorios

ack  --ignore-dir={dir_a,dir_b}
0
agregado