¿Cómo puedo encontrar cada archivo y directorio que coincida con un patrón, excluyendo un directorio usando find?
Digamos que tengo la siguiente estructura de archivos;
.
foo-exclude-me /
foo.txt
foo-exclude-me-not /
foo.txt
bar/
foo.txt
foobar /
bar.txt
foofoo.txt
¿Cómo obtendría el siguiente resultado usando find:
./bar/foo.txt ./bar/foobar ./bar/foobar/foofoo.txt ./foo-exclude-me-not ./foo-exclude-me-not/foo.txt
He intentado usar los dos comandos siguientes:
encontrar . -name 'foo-exclude-me' -prune -o -name 'foo *' encontrar . -name 'foo *' \! -path './foo-exclude-me/*'
pero ambos devuelven esto:
./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me # << this should be excluded
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt
¿Cómo puedo excluir correctamente el foo-exclude-medirectorio?

foo-exclude-melugar de./foo-exclude-me. También intente agregar-printal final del comando.-printy enfoo-exclude-melugar de./foo-exclude-me.Respuestas:
Sin no
-print, la acción implícita predeterminada se aplica a todas las coincidencias, incluso a las podadas. Lo explícito se-printaplica solo bajo las condiciones especificadas, que-name 'foo*'solo están en la rama else de-name 'foo-exclude-me'.En términos generales, use un explícito
-printsiempre que haga algo más complejo que una conjunción de predicados.Su segundo intento con
! -path './foo-exclude-me/*'no funcionó porque./foo-exclude-meno coincide./foo-exclude-me/*(sin seguimiento/). Agregar! -path ./foo-exclude-mefuncionaría.fuente
fuente
-prunees relevante.-prunees una de las opciones más complicadas parafindcausar que se desactive-print(que está habilitada de forma predeterminada)