2010-05-09 30 views
5

decir que nuestra estructura de carpetas es el siguiente:Grep: Excluir una carpeta específica utilizando

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

Quiero buscar de forma recursiva /app/data pero yo no quiero buscar /app/secondary/data.

Desde dentro de la carpeta de aplicaciones, ¿cómo sería mi comando grep?

Respuesta

11

esto va a hacer el truco

grep -r --exclude-dir='secondary/data' PATTERN data 
+2

Solo para la versión de gnu grep> = 2.5.1a – rymo

+0

entonces, ¿cómo hacerlo antes de gnu grep 2.5.1a? – simpleuser

+1

'--exclude-dir = 'secundario/datos' es redundante aquí. Ver mi respuesta a continuación. –

2

Por qué la respuesta aceptada es incorrecto

La respuesta aceptada por @seamus está mal porque grep -r --exclude-dir=<glob> partidos contra nombres base que por definición no puede contener barras diagonales (las barras lo convierten en un no-operativo de manera efectiva ya que ningún nombre base coincidirá).

De GNU Grep Manual:

--exclude-dir = glob

... Durante la búsqueda recursiva , salta cualquier subdirectorio cuyo nombre base partidos glob ...

Why the quest ion es probablemente equivocado

Creo estructura de directorios de la OP no representa bien el problema, porque ya que si uno tiene ...

. 
├── app 
   ├── data 
   └── secondary 
    └── data 

... y el directorio actual es app simplemente se puede hacer:

> grep -r <search-pattern> data 

no va a buscar en la carpeta secondary como su no dentro data.

lo que la pregunta podría ser destinado

Dada la estructura de directorios anidados con data carpetas cómo buscar en el nivel superior data pero no en las carpetas anidadas.

. 
└── data 
    ├── file.txt 
    ├── folder1 
    │   └── folder2 
    │    ├── data 
    │    │   └── file.txt 
    │    └── file.txt 
    └── folder3 
     ├── data 
     │   └── file.txt 
     └── file.txt 

Lo que la respuesta sería

> grep -r --exclude-dir='data' <search-pattern> data/* 

Nota del * al final. Si se omite, tampoco se buscará la carpeta de nivel superior data.

+0

'coincidencias con los nombres base es importante saber aquí. Después de ver algunas respuestas de SO, este fue el único que lo señaló – Jeremy

Cuestiones relacionadas