No estoy seguro de lo que estoy haciendo mal en esto. He leído un montón de publicaciones y sitios web, pero todavía tengo problemas.
Necesito verificar un sistema en busca de archivos que hayan cambiado el día anterior, pero debo omitir ciertas carpetas montadas, ya que están montadas en unidades con toneladas de TB.
Esta es la configuración:
Tengo algunas unidades montadas en carpetas dentro de /usr/local/connect/
/usr/local/connect/logs –> se monta en un NFS
/usr/ local/connect/DR01 –> se monta en un recurso compartido DR
algunos más como este…
Quiero ejecutar un comando de búsqueda normal (o cualquier comando que funcione para esto) que excluya esos directorios. Aquí hay algunas cosas que he probado que no parecen funcionar.
encontrar . ! -ruta “/usr/local/conectar/” -tipo f -nombre “*.txt” -mtime -1
encontrar . -tipo f -ruta “/usr/local/conectar/” -prune -o -nombre “*.txt” -mtime -1
Ninguno de esos parece funcionar. También he intentado hacerlo en diferentes órdenes (como -escribir f primero, o podar primero en la línea, etc.). Pero leí que la ciruela pasa elimina la ruta de procedimiento. Esto parece que debería ser algo fácil de hacer. ¡Avísame si ves mi error! ¡Gracias de antemano!
Respuesta aceptada:
-path "/usr/local/connect/"
coincidiría solo en una ruta de archivo que sea exactamente /usr/local/connect/
. Eso nunca coincidirá porque con find .
, todas las rutas comenzarán con .
Así que querrías:
find / -path '/usr/local/connect/*' -type d -prune -o \
-name '*.txt' -type f -mtime -1 -print
El -print
también es importante Sin él, habría un implícito -print
para archivos que coincidan con la expresión completa (por lo que ambas partes de -o
).
Tenga en cuenta que también puede usar -xdev
para evitar cruzar cualquier límite del sistema de archivos.
Si desea ejecutarlo con find .
cuando el directorio actual es /usr/local
, eso tendría que ser:
cd /usr/local &&
find . -path './connect/*' -type d -prune -o \
-name '*.txt' -type f -mtime -1 -print