2010-10-20 13 views
6

En un sistema Unix, ¿cómo puedo supervisar (cómo funciona la cola) un directorio para los cambios realizados en los archivos, ya sean nuevos creados o cambios de tamaño, etc.¿Supervisa la lista de directorios por cambios?

Buscando una herramienta de línea de comandos en lugar de algo para ser instalado.

Respuesta

1

puede crear el suyo propio si no desea instalar las herramientas. Solo una idea. Crea un archivo de línea base de tu directorio usando el comando find. Use un trabajo de ciclo o cron, find el directorio usando los mismos parámetros, y verifique el nuevo archivo con el archivo de línea de base. Utilizar una herramienta como diff para obtener las diferencias ..

por ejemplo

find /path [other options] >> baseline.txt 
while true #or use a cron job 
do 
    find /path [same options] >> listing.txt 
    diff baseline.txt listing.txt 
    # do processing here... 
    mv listing.txt baseline.txt # update the baseline. 
    sleep 60 
done 
+0

Solo para mi referencia, ¿existen cosas como esta? – siliconpi

+0

¿De qué "cosas" estás hablando? Si estás hablando de herramientas pensadas para tales cosas, entonces sí. herramientas como tripwire, inotify etc ... – ghostdog74

5

más variantes de Unix tienen una API para esto, pero no está estandarizado. En Linux, hay inotify. En la línea de comando, puede usar inotifywait. Ejemplo de uso:

inotifywait -m /path/to/dir | while read -r dir event name; do 
    case $event in 
    OPEN) echo "The file $name was created or opened (not necessarily for writing)";; 
    WRITE) echo "The file $name was written to";; 
    DELETE) echo "The file $name was deleted ";; 
    esac 
done 

tipos de eventos Inotify a menudo no son exactamente lo que usted está tratando de darse cuenta (por ejemplo ABIERTO es muy amplia), por lo que no se sienten mal si se termina haciendo sus propios controles de archivos.

+0

Esta es la respuesta correcta porque muestra cómo usar una API para monitorear los cambios. La respuesta de ghostdog74 podría funcionar, pero tiene un costo de recursos. ¿Qué pasa si necesita monitorear 1000 directorios? –

+0

Nota: esta respuesta solo funciona si se usa Linux kernel 2.6.13 o posterior. No estoy seguro acerca de otros Unicies. –

+0

¿podría aclarar qué significa * while ** leer -r dir nombre del evento; ** do *? – arod

Cuestiones relacionadas