¿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

Respuestas:


25
find . -type d -not \( -name .svn -prune \)

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'

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*'

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 .......


2

Podrías usar:

find . -type d -not -wholename '*.svn*' 

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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.