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
.
Solo para la versión de gnu grep> = 2.5.1a – rymo
entonces, ¿cómo hacerlo antes de gnu grep 2.5.1a? – simpleuser
'--exclude-dir = 'secundario/datos' es redundante aquí. Ver mi respuesta a continuación. –