¿Cómo encuentro (o excluyo) todos los directorios y subdirectorios que coinciden con cierto patrón (en Linux)?

17

Estoy tratando de usar el comando find de Linux para encontrar todos los directorios y subdirectorios que no tienen .svn (carpetas ocultas de Subversion) en su ruta. Solo puedo hacer que excluya los directorios .svn reales, pero no ninguno de los subdirectorios.

Esto es lo que estoy haciendo ahora:

find . -type d \! -iname '*.svn*'

También he intentado:

find . -type d \! iname '.svn' \! iname '.svn/*'

Solo para su información, estoy tratando de usar el patrón find para poder aplicar algunas propiedades de subversión a todos los directorios en mi repositorio, excluyendo las carpetas ocultas de subversion y sus subdirectorios (aplicando el comando exec a los directorios devueltos por el comando find ) ..

TIA

Jason Down
fuente

Respuestas:

25
find . -type d -not \( -name .svn -prune \)
Dan Carley
fuente
Iré con este, aunque todos parecían funcionar.
Jason Down
He usado -prune en find antes, pero no había visto ese truco \ (... \). Gracias.
Rory
¿Puede decir cómo funcionaría esto en una aplicación node.js / express donde quiero excluir a los módulos de nodo de contar las líneas? Lo intenté find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l sin éxito ...
destrozando el
En respuesta a @shredding con respecto a las aplicaciones Node.js / Express y excluyendo los directorios node_modules de los resultados de find, esto funciona para mí: find. -name ' .test.js ' -not (-wholename '* node_modules ') ... dado que las pruebas que quiero ejecutar tienen el sufijo ".test.js"
mysterlune
¿Funcionaría esto sin el -type d? Me gusta buscar todos los archivos pero excluir el directorio ".git" de forma recursiva
James Mitch
6

¿Qué tal simplemente?

find . -type d |  grep -v '.svn'
wazoox
fuente
Pierde su capacidad de usar cualquiera de las acciones de búsqueda.
David Pashley
Sí, pero ¿qué pasa con un pequeño y agradable bucle sh? :) para ARCHIVO en find . -type d | grep -v '.svn'; hacer eco lo que sea; hecho
wazoox
6

¿Qué pasa con la -pathopción de encontrar?

find . -type d ! -path '*.svn*'
Rory
fuente
1
Perdí una cita de cierre. Existe una posibilidad externa de que los comodines sean demasiado codiciosos.
Dan Carley
2

encontrar . -path './tmp' -prune -o .......


fuente
2

Podrías usar:

find . -type d -not -wholename '*.svn*' 
idbrii
fuente
quitó el * del frente de la respuesta ... debería ser encontrado. -type d -not -wholename ' /.svn/ ' (es el nombre completo squote asterisk slash dot svn slash asterisk squote)