2010-10-20 4 views
6

Sur un système Unix, comment surveiller (comme le fonctionnement de 'tail') un répertoire des modifications apportées aux fichiers - soit de nouveaux créés, soit de changements de taille, etc.Suivre la liste du répertoire pour les changements?

Vous cherchez un outil de ligne de commande plutôt que quelque chose à installer.

Répondre

1

Vous pouvez créer le vôtre si vous ne voulez pas installer d'outils. Juste une idée. Créez un fichier de ligne de base de votre répertoire à l'aide de la commande find. Utilisez un travail de boucle ou cron, le répertoire en utilisant les mêmes paramètres et vérifiez le nouveau fichier par rapport au fichier de ligne de base. Utilisez un outil comme diff pour obtenir les différences ..

par exemple

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

Juste pour ma référence - faire des choses comme ça existe? – siliconpi

+0

de quoi parlez-vous? Si vous parlez d'outils destinés à de telles choses, alors oui. outils comme tripwire, inotify etc ... – ghostdog74

5

La plupart des variantes unix ont une API pour cela, mais pas standardisés. Sous Linux, il y a inotify. Sur la ligne de commande, vous pouvez utiliser inotifywait. Exemple d'utilisation:

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 

types d'événements Inotify ne sont souvent pas exactement ce que vous essayez de remarquer (par exemple OPEN est très large), donc ne se sentent pas mal si vous finissez par faire vos propres contrôles de fichiers.

+0

C'est la bonne réponse car elle montre comment utiliser une API pour surveiller les changements. La réponse de ghostdog74 pourrait fonctionner, mais elle a un coût de ressources. Que faire si vous avez besoin de surveiller 1000 répertoires? –

+0

Note: cette réponse ne fonctionne que si vous utilisez Linux noyau 2.6.13 ou plus tard. Je ne suis pas sûr d'autres Unicies. –

+0

pourriez-vous s'il vous plaît clarifier ce que fait * en ** lire le nom de l'événement -r dir; ** faire *? – arod

Questions connexes