2011-11-19 7 views
14

Básicamente quiero hacer ack foo * .citrus y tener ack profundizar y encontrar la cadena 'foo' en todos los archivos Citrus en el directorio actual y debajo. El problema es que esto no funcionará si no hay ningún archivo Citrus en el directorio actual.Ack: árbol de directorios de búsqueda para archivos con una extensión particular

Intenté jugar con -G sin éxito. ¿Realmente necesito agregar un tipo de archivo en .ackrc solo para limitar la búsqueda a archivos con una extensión dada?

Respuesta

11

De forma predeterminada, ack busca solo en archivos con tipos conocidos (como * .java, * .cpp, etc.). No sabe acerca de los archivos * .citrus, por lo que buscar en estos archivos debe utilizar -a modificador de línea de cmd:

$ack -a -G '\.citrus$' foo 
1.d/1.citrus 
1:foo_bar 
+1

o puede utilizar este consejo: http://stackoverflow.com/questions/ 3870611/how-to-let-ack-support-more-filetypes –

+1

La -a es excesiva. --type-set es el camino a seguir. –

+1

Esto es lógico, pero menos que óptimamente útil. Una tarea tan simple como "buscar archivos con esta extensión" requiere que no solo le muestres la extensión con una extensión regular (-G), sino que realmente desees que busque esos archivos (-a o --tipo- establecer - incluso esta elección es controvertida). Tienes que amar a Unix. –

4

Usted no tiene que ponerlo en .ackrc si no quiere. También puede establecer ACK_OPTIONS en su entorno, o especificar --type-set arguments en la línea de comando. ack no le importa

12

Según lo sugerido por Andy Lester, también puede crear un compuesto tipo witout tomarse la molestia de añadir que en su .ackrc:

ack --type-set=cit=.citrus --cit "foo" 
Cuestiones relacionadas