Surveiller les modifications du contenu des dossiers

18

Je peux surveiller les changements de contenu d'un fichier en utilisant la commande tail -f

Existe-t-il un moyen similaire de surveiller les modifications d'une structure de répertoires de la même manière que tail -f surveille le fichier?

J'ai un long processus qui ajoute un fichier à un certain chemin sous un répertoire et je veux suivre les entrées de fichier pendant qu'il (ou ils) écrivent dans les répertoires et sous-répertoires.

johan.i.zahri
la source

Réponses:

27

Le inotifysystème du noyau est ce dont vous avez besoin.

  1. Installer inotify-tools:

    sudo apt-get install inotify-tools
    
  2. Configurer une montre:

    inotifywait /path/to/directory --recursive --monitor
    
  3. Asseyez-vous et regardez la sortie.


De man inotifywait:

-m, --monitor
   Instead of exiting  after  receiving  a  single  event,  execute
   indefinitely.   The default behaviour is to exit after the first
   event occurs.
-r, --recursive
   Watch all subdirectories of any directories passed as arguments.
   Watches will be set up recursively to an unlimited depth.   Sym‐
   bolic  links  are  not  traversed.  Newly created subdirectories
   will also be watched.

Vous pouvez utiliser l' --eventoption pour surveiller des événements spécifiques, comme la création, la modification, etc.

muru
la source
1
au cas où quelqu'un toucherait ce problème: Impossible de regarder.; limite supérieure sur les montres inotify atteinte allez ici blog.sorah.jp/2012/01/24/inotify-limitation
johan.i.zahri
1
Sur l'un de mes serveurs, j'ai découvert qu'il n'était plus appelé inotify-waitjuste inotifywait. Ils ont dû changer le nom pour supprimer le trait d'union.
Jamesking56
@ Jamesking56 J'ai édité le trait d'union.
muru
Remarque, l'aide pour inotifywait indique qu'il attend les options avant les chemins de fichier.
Felix Dombek
8

--eventsn'est pas le filtre, vous devez utiliser --event. Par exemple, voici la ligne de commande pour surveiller les événements de création / modification:

# inotifywait . --recursive --monitor --event CREATE --event MODIFY

Alors je vois:

Setting up watches.  Beware: since -r was given, this may take a while!

Et voici le format du flux:

[path] [event] [file]

par exemple

./.mozilla/firefox/b4ar08t6.default/ MODIFY cookies.sqlite-wal
./.mozilla/firefox/b4ar08t6.default/ MODIFY cookies.sqlite-wal
./.mozilla/firefox/b4ar08t6.default/ MODIFY cookies.sqlite-wal
Selly
la source