2011-12-29 11 views
23

¿Cómo ignoro directorios específicos a través de RegEx con ack?ack: excluye directorios específicos de la búsqueda a través de regex

Puedo usar la opción --ignore-dir, pero esto no me permite especificar un RegEx. Quiero poder ignorar cualquier directorio que tenga las palabras test o tests o patrones más complicados en su nombre.

También probé una búsqueda hacia atrás a través negativo

ack -G '(?<!test)' pattern 

pero esto no funciona. No excluye los directorios test.

Respuesta

20

Utilice la opción indocumentado "--invert-archivo-match" (versión acuse de recibo en mi sistema: 1,96):

$ ack pattern -G 'test|tests' --invert-file-match 

Bueno, es una especie de documentado:

$ ack --help|grep invert 
-v, --invert-match Invert match: select non-matching lines 
--invert-file-match Print/search handle files that do not match -g/-G. 

Se no está documentado en su perldoc.

+0

Impresionante - gracias!Tampoco nada sobre esto en la página del manual que estoy viendo, pero funciona. – AmigoNico

5

En interés de la gente que usa una versión de ack anterior a 1.96 (como yo), puede usar regex para ver esto. He aquí un ejemplo:

ack --java 'text-pattern' -G '^((?!(test|target)).)*$' 

Esto buscará la text-pattern en todas Java archivos de forma recursiva que no tienen las palabras test o target en su camino (de.).

+0

¿Qué significa esta construcción '^ ((?! (Test | target)).) * $'? – Scit

10

Con ACK2, parece you can't use holygeek's solution.

Así es como yo lo haría utilizando -v y -x:

ack -v -g 'test' | ack -x pattern 

De manera más general, 'test' puede ser una expresión regular para los directorios a excluir

+1

De hecho, para ack2, esto es lo que quieres. ¡Gracias! – igniteflow

2

En versiones recientes de ack, puede usar expresiones regulares con --ignore-dir.

De this thread:

Sí, en 2.15_01 hemos añadido:

  • ACK ahora es compatible con --ignore-dir = partido: .... Gracias, Ailin Nemui! (GitHub boleto # 42)

enlace GitHub: https://github.com/petdance/ack2/issues/42

Lamentablemente, creo que esto sólo apoyos que coincida con el nombre del directorio de base, no la ruta completa.

Por ejemplo, no puede coincidir con una ruta como ".*/docs/generated/.*" con ella.

Para eso, vea el (todavía abierto) GitHub issue 291.

Cuestiones relacionadas