Отслеживать изменения содержимого папки

18

Я могу отслеживать изменения содержимого файла с помощью команды tail -f

Существует ли аналогичный способ отслеживания изменений в структуре каталогов, как tail -f отслеживает файл?

У меня есть длительный процесс, который добавляет файл к определенному пути в каталоге, и я хочу отслеживать поступления файлов, когда он (или они) записывают (ы) в каталоги и подкаталоги.

johan.i.zahri
источник

Ответы:

27

Система inotifyядра - это то, что вам нужно.

  1. Установить inotify-tools:

    sudo apt-get install inotify-tools
    
  2. Настройте часы:

    inotifywait /path/to/directory --recursive --monitor
    
  3. Сядьте и посмотрите выходной.


От 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.

Вы можете использовать --eventопцию, чтобы следить за конкретными событиями, такими как создание, изменение и т. Д.

Мур
источник
1
если кто-нибудь ударил эту проблему: не удалось посмотреть.; верхний предел достигнутых часов inotify иди сюда. blog.sorah.jp/2012/01/24/inotify-limitation
johan.i.zahri
1
На одном из моих серверов я обнаружил, что он больше не называется inotify-waitпросто inotifywait. Должно быть, они изменили имя, чтобы удалить дефис.
Jamesking56
@ Jamesking56 Я отредактировал дефис.
Муру
Обратите внимание, что справка для inotifywait говорит, что ожидает опции перед путями к файлам.
Феликс Домбек
8

--eventsэто не фильтр, вы должны использовать --event. Например, вот командная строка для мониторинга событий создания / изменения:

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

Тогда я вижу:

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

А вот формат ленты:

[path] [event] [file]

например

./.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
источник