GNU/Linux >> Tutoriales Linux >  >> Linux

En Linux, ¿cuál es una forma más rápida que `find` o `diff -r` para ver si algo dentro de un directorio ha cambiado?

Solución 1:

GNU tar tiene una opción --newer-mtime, que requiere un argumento de fecha, que presumiblemente sería la última vez que hizo una copia de seguridad. Según la cantidad de trabajo que desea restaurar el sistema de archivos, esta podría ser la última copia de seguridad completa, en cuyo caso necesitaría restaurar el volcado completo y la última diaria, o podría hacerlo desde la última copia de seguridad incremental, en la que caso, necesitaría restaurar el volcado completo y cada volcado después de eso.

Esta opción se basa en la marca de tiempo de modificación en el archivo, por lo que si eso se ha cambiado explícitamente, existe la posibilidad de que su copia de seguridad lo pierda.

Solución 2:

La utilidad incron usa inotify para ejecutar comandos cuando ocurren eventos del sistema de archivos. El archivo de configuración es como un crontab, pero en lugar de horas especificas rutas y eventos.

El comando podría ser su secuencia de comandos de copia de seguridad (en cuyo caso, la copia de seguridad comenzará casi inmediatamente después de que se modificaron los archivos), o podría hacer que cree algún archivo y hacer que la secuencia de comandos de copia de seguridad verifique la existencia de ese archivo y luego lo elimine. Si el archivo existe, uno de los eventos ocurrió desde la última ejecución.

Solución 3:

Siempre puedes canalizar buscar salida de wc y obtener un número entero de archivos modificados:

find . -ctime 1 | wc -l

Aunque la respuesta de David requiere menos cambios de código :)

Solución 4:

Esta es una idea un poco descabellada, pero podrías jugar un poco con md5sum y ls.

Esta idea es solo mirar un md5sum de un archivo, y ese archivo es una lista de archivos del directorio que está viendo. Y mientras nada cambie, el md5sum es el mismo. Pero si se actualiza una marca de tiempo, md5sum cambiará y sabrá que necesita hacer un tar nuevo y enviarlo a su servidor ftp.

Podríamos empezar con algo como esto

ls -lR /path/to/dir/ | md5sum > file_list.txt.md5

Luego necesitaría agregar una comparación entre el antiguo md5 y el actual... etc etc

/Johan

Solución 5:

Las versiones recientes de GNU find tienen la acción "-quit", lo que hace que find detenga inmediatamente la búsqueda:

— Acción:-salir

Salga inmediatamente (con valor de retorno cero si no se han producido errores). Esto es diferente a '-prune' porque '-prune' solo se aplica al contenido de los directorios eliminados, mientras que '-quit' simplemente hace que find se detenga inmediatamente. No se dejarán en ejecución procesos secundarios, pero no se procesarán más archivos especificados en la línea de comandos. Por ejemplo, find /tmp/foo /tmp/bar -print -quit imprimirá solo '/tmp/foo'. Cualquier línea de comando que haya sido creada por '-exec ... +' o '-execdir ... +' se invoca antes de salir del programa.

Puede usar una expresión de búsqueda para buscar archivos que han cambiado y usar -quit para detenerse tan pronto como encuentre uno. Eso debería ser más rápido que encontrar continuando su escaneo.

-quit se agregó en fileutils V4.2.3


Linux
  1. Comprobar si un directorio está vacío usando C en Linux

  2. ¿Una forma más rápida de mover la página de memoria que mremap ()?

  3. ¿Cómo puedo encontrar un archivo/directorio que podría estar en cualquier lugar de la línea de comandos de Linux?

  4. Encontrar un directorio en una terminal de Linux

  5. ¿Cuál es la forma más rápida de mover un millón de imágenes de un directorio a otro en Linux?

Cómo contar archivos en el directorio en Linux

Encuentre y elimine el archivo más antiguo si hay más de X archivos en un directorio en Linux

Cómo encontrar el tamaño total de un directorio en Linux

El comando find Directory de Linux:Explicación

¿Qué significa montar un dispositivo en Linux?

Encuentre cualquier línea en VI que tenga algo que no sea ATCG