2010-05-13 13 views
5

Tengo un comando find que corro para buscar archivos cuyos nombres contienen foo.¿Cómo evito encontrar desde imprimir carpetas .git?

Quiero omitir el directorio .git. El siguiente comando funciona excepto imprime un molesto .git cualquier momento se salta un directorio .git:

find . (-name .git) -prune -o -name '*foo*' 

¿Cómo puedo evitar que la omiten .git directorios de impresión en la salida estándar?

+1

la sintaxis '(-nombre .git)' no tiene sentido – msw

+0

derecha - Creo que debe ser \\ (\\ -nombre .git) ¿correcto? –

Respuesta

1

Prueba con esto:

find . -name '*foo*' | grep -v '\.git' 

Esto todavía recorrerá en los directorios .git, pero no mostrarlos. O puede combinar con tu versión:

find . (-name .git) -prune -o -name '*foo*' | grep -v '\.git' 

También puede hacerlo sin grep:

find . (-name .git) -prune -printf '' -o -name '*foo*' -print 
+0

Bien - He descubierto que no tengo que poner el "printf" - ¡Solo tengo que poner la impresión en la parte posterior del comando! Por ejemplo, esto funciona: buscar. \ (-name .git \) -prune -o -name '* foo *' -print ¡Gracias! –

+0

Usar un grep después de encontrar es un mal truco por muchas razones. Considere usar las opciones incorporadas en find para filtrar –

8

Así que para una mejor visibilidad:

find -name '.git*' -prune -o -name '*foo*' -print 

Esto también omite archivos .gitignore; fíjese en el posterior -print para omitir la impresión, -prune detiene su descenso pero sin que la impresión lo imprima. Twisted C;

+0

A continuación, le mostramos cómo encontrar directorios: find. -name '.git \ *' -prune -o -name '\ * foo \ *' -maxdepth 4 -type d -print – Lionel

2
find . -not -wholename "./.git*" -name "*foo*" 

o, más estrictamente, si no quiere ver .git/pero que desea buscar en otro directorio cuyo nombre también comienza con .git (.git-foo/bar/...)

find . -not -wholename "./.git" -not -wholename "./.git/*" -name "*foo*" 

Un poco más extraño pero más eficiente porque limpiará toda la .git dir:

find . -not \(-wholename "./.git" -prune \) -name "*foo*" 
Cuestiones relacionadas