Отслеживать список каталогов на предмет изменений? - PullRequest
6 голосов
/ 20 октября 2010

В системе Unix, как я могу отслеживать (например, как работает 'tail') каталог на предмет изменений, внесенных в файлы - либо новые созданные, либо изменения размера и т. Д.

Ищем инструмент командной строки, а не что-то для установки.

Ответы [ 2 ]

5 голосов
/ 20 октября 2010

Большинство вариантов Unix имеют API для этого, но он не стандартизирован. В Linux есть inotify . В командной строке вы можете использовать inotifywait. Пример использования:

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

Типы событий Inotify часто не совсем то, что вы пытаетесь заметить (например, OPEN очень широк), так что не расстраивайтесь, если в итоге вы делаете свои собственные проверки файлов.

1 голос
/ 20 октября 2010

тогда вы можете создать свой собственный, если не хотите устанавливать инструменты.Просто идея.Создайте файл базовой линии вашего каталога с помощью команды find.Используйте задание цикла или cron, find каталог, используя те же параметры, и сравните новый файл с файлом базовой линии.Используйте инструмент, как diff, чтобы получить различия ..

например

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