Monitorar alterações no conteúdo da pasta

18

Posso monitorar as alterações de conteúdo de um arquivo usando o comando tail -f

Existe uma maneira semelhante de monitorar as alterações de uma estrutura de diretórios da maneira como o tail -f monitora o arquivo?

Eu tenho um processo de execução longa que adiciona arquivo a um determinado caminho em um diretório e quero rastrear as entradas de arquivo à medida que elas gravam nos diretórios e subdiretórios.

johan.i.zahri
fonte

Respostas:

27

O inotifysistema do kernel é o que você precisa.

  1. Instalar inotify-tools:

    sudo apt-get install inotify-tools
    
  2. Configure um relógio:

    inotifywait /path/to/directory --recursive --monitor
    
  3. Sente-se e observe a saída.


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.

Você pode usar a --eventopção para assistir a eventos específicos, como criação, modificação etc.

muru
fonte
11
caso alguém acerte este problema: Falha ao assistir.; limite superior em relógios inotify chegou aqui blog.sorah.jp/2012/01/24/inotify-limitation
johan.i.zahri
11
Em um dos meus servidores, descobri que não é mais chamado de inotify-waitjusto inotifywait. Eles devem ter alterado o nome para remover o hífen.
Jamesking56
@ Jamesking56 Eu editei o hífen.
muru
Observe que a ajuda do inotifywait diz que espera as opções antes dos caminhos do arquivo.
Felix Dombek
8

--eventsnão é o filtro, você precisa usar --event. Por exemplo, aqui está a linha de comando para monitorar eventos de criação / modificação:

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

Então eu vejo:

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

E aqui está o formato do feed:

[path] [event] [file]

por exemplo

./.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
fonte