Configure find para que ni siquiera busque en los directorios, si el nombre del directorio coincide con 2012

1

Estoy usando find /home/myid/dir-with100directories/ -mmin -5 -not -path "*/2012/*para encontrar todos los archivos, excepto no en el directorio 2012, pero de alguna manera funciona realmente muy lento.

Y supongo que buscar looks en TODOS los directorios, ¿simplemente no muestra / oculta resultados para 2012? ¿Estoy correcto o estoy equivocado?

Maris
fuente

Respuestas:

2

Si desea excluir una ruta, debe hacer que coincida correctamente en la -pathopción. La opción requiere que escriba una ruta totalmente coincidente, incluido el prefijo de ruta absoluta, por lo que simplemente /2012/no es suficiente.

find /home/myid/dir-with100directories/ -mmin -5 \
-not -path '/home/myid/dir-with100directories/2012/*'

O:

cd /home/myid/dir-with100directories/
find . -mmin -5 -not -path './2012/*' 

Si desea excluir cualquier carpeta con el nombre 2012, con GNU find:

cd /home/myid/dir-with100directories/
find . -regextype posix-extended -not -regex '.*/2012\(/.*\)?'

O, para podar directorios con el nombre 2012:

cd /home/myid/dir-with100directories/
find . -type d -and -name '2012' -prune -o -print

Lo anterior imprimirá todo lo demás como una acción (ver aquí para más información).


Si usa Bash, puede omitir un 2012directorio de inmediato:

shopt -s extlob
find /home/myid/dir-with100directories/!(2012) -mmin -5

La misma idea con Zsh:

setopt extendedglob
find /home/myid/dir-with100directories/^2012 -mmin -5
slhck
fuente
Tengo más de 200 directorios. por ejemplo: <br> / home / myid / dir-with100directories / a1 / 2012 <br> / home / myid / dir-with100directories / aaabbb222 / 2012 <br> y así sucesivamente.
Maris
Luego puede usar una opción de ruta como -path '*/2012*', pero esto también excluiría los archivos que comienzan con 2012. O find . -regextype posix-extended -not -regex '.*/2012\(/.*\)?'.
slhck
de alguna manera no funciona ninguna de las sugerencias. Todos son de 1 minuto y 20 segundos, sin embargo, si se excluye correctamente, la búsqueda debe buscar en carpetas, donde hay uno o más archivos (en 2012 hay cientos / decenas de archivos en cada directorio). Si se excluye correctamente, debe ejecutarse en menos de 20 segundos.
Maris
find / home / myid / dir-with100directories / -mmin -5 -not -path '/ home / myid / dir-with100directories / * / 2012 /' ¡Intenté esto, pero tampoco tuve suerte!
Maris
Si termina -pathcon una barra inclinada, no excluirá todo lo que está debajo del directorio, solo el directorio en sí. Prueba la pruneopción que agregué a mi respuesta.
slhck
0

Consulte la opción -pruneen la página de manual de find, y un ejemplo en la descripción de la opción -path.

Jaap Eldering
fuente