2010-05-09 11 views
40

Mi estructura de carpetas es así:ACK: Excluyendo sólo un directorio, pero manteniendo todos los demás con el mismo nombre

/app 
/app/data 
... 
/app/secondary 
/app/secondary/data 

Quiero buscar de forma recursiva /app, incluyendo /app/data. No obstante, no quiero buscar /app/secondary/data. Esto lo que tengo hasta ahora:

ack --ignore-dir=data searchtext 
ack --ignore-dir=secondary/data searchtext 

El primer comando está ignorando ambos directorios y la segunda es ignorar ninguno de los dos. Desde dentro de la carpeta de aplicaciones, ¿cómo debería ser mi comando ack?

Respuesta

22

Esta respuesta es para versiones de Ack anteriores a 2, consulte This answer for versions of Ack >=2.

El primero es ignorar ambos porque ambos tienen 'datos' como un subdirectorio y ack busca sub-directorios por defecto. Por lo tanto, ignorará cualquier subdirectorio con ese nombre. Desafortunadamente, tu segunda forma tampoco funciona. Esto funciona para mí:

ack -a searchtext -G '^(?!.*secondary/data.*).*$' 

En lugar de -a para buscar todos los archivos, ver ACK-grep --help = tipos de buscar solamente ciertos tipos de archivos, por ejemplo --type = Texto

+0

Gracias para la respuesta. Estoy obteniendo esto: $ ack-grep --text -G '^ (?!. * Secondary/data. *). * $' ack-grep: No se ha encontrado expresión regular. – mattalxndr

+0

es porque olvidó darle el patrón que está buscando, es decir, 'searchtext' – rkulla

+0

Para obtener información acerca de cómo poner esta opción -G en un archivo '~/.ackrc', consulte: http://stackoverflow.com/questions/5425363/is-it-possible-to-add-ag-option-to-ackrc –

47

La mayor las versiones de ack solo pueden tomar el nombre de la carpeta, no la ruta de la carpeta. Desde la versión 1.93_02, han añadido en esta capacidad:

1.93_02  Wed Oct 6 21:39:58 CDT 2010 
    [ENHANCEMENTS] 
    The --ignore-dir option now can ignore entire paths relative 
    to your current directory. Thanks to Nick Hooey. For example: 

     ack --ignore-dir=t/subsystem/test-data 

(De betterthangrep.com/Changes)

Puede comprobar la versión que tiene con --version:

ack --version 
+0

No funciona en ack 2.0 https://github.com/petdance/ack2/issues/291 – geekQ

Cuestiones relacionadas