2010-10-20 11 views
6

Su un sistema unix, come faccio a monitorare (come il funzionamento di 'tail') una directory per le modifiche apportate ai file - nuovi o creati, o cambiamenti di dimensione, ecc.Controlla l'elenco delle directory per le modifiche?

Cercare uno strumento da riga di comando anziché qualcosa da installare

risposta

1

è possibile creare il proprio se non si desidera installare strumenti. Solo un'idea Creare un file di base della directory utilizzando il comando find. Utilizzare un processo loop o cron, find, la directory che utilizza gli stessi parametri e controllare il nuovo file sul file di base. Utilizzare uno strumento come diff per ottenere le differenze ..

esempio

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 per mio riferimento, fare cose del genere? – siliconpi

+0

di "cose" di cui stai parlando? Se stai parlando di strumenti pensati per queste cose, allora si. strumenti come tripwire, inotify ecc ... – ghostdog74

5

varianti più UNIX hanno un'API per questo, ma non è standardizzata. Su Linux, c'è inotify. Sulla riga di comando, è possibile utilizzare inotifywait. Esempio di utilizzo:

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 

tipi di eventi inotify spesso non sono esattamente quello che stai cercando di notare (ad esempio OPEN è molto ampia), quindi non si sentono male se si finisce per fare i propri controlli di file.

+0

Questa è la risposta giusta perché mostra come utilizzare un'API per monitorare le modifiche. La risposta di ghostdog74 potrebbe funzionare, ma ha un costo di risorse. Cosa succede se è necessario monitorare 1000 directory? –

+0

Nota: questa risposta funziona solo se si utilizza il kernel Linux 2.6.13 o successivo. Non sono sicuro di altri Unicies. –

+0

potresti chiarire cosa fa * while ** read -r dir nome dell'evento; ** do *? – arod

Problemi correlati