Уведомлять о новых файлах с помощью inotify

Мне нужно сделать сценарий, который уведомляет файл журнала, когда новый файл входит в каталог. Я хотел бы использовать inotify в качестве сценария оболочки или PHP, большинство примеров, которые я нашел, написаны на C. Может ли кто-нибудь привести мне пример этого?

Кроме того, может ли inotify узнать, когда файл копируется?


person user2475310    schedule 10.09.2014    source источник
comment
См.: inotifywait и inotify для возможных инициированных событий (закрытие файла / копируемого файла также можно зафиксировать).   -  person Wrikken    schedule 11.09.2014


Ответы (1)


Эта команда оболочки будет записывать в logfile всякий раз, когда файл создается в /path/to/dir:

inotifywait -m -e create /path/to/dir >>logfile

Объяснение:

  • -m говорит inotifywait продолжать работу. По умолчанию выход после первого события

  • -e create указывает inotifywait сообщать только о событиях create файла. (В зависимости от того, чего вы хотите достичь, вам могут быть интересны события close.)

  • /path/to/dir — целевой каталог для просмотра. Подкаталоги не отслеживаются, если не указана рекурсивная опция -r.

  • >>logfile указывает оболочке перенаправить весь вывод в файл logfile. Если вы оставите эту часть выключенной, вывод будет направлен на стандартный вывод, и вы сможете наблюдать в режиме реального времени за созданием файлов.

Мониторинг большего количества событий

inotifywait сообщит о нескольких различных событиях. В качестве примера я запустил inotifywait в одном окне, а запись в файл из другого окна:

$ inotifywait -m .
Setting up watches.
Watches established.
./ OPEN myfile
./ MODIFY myfile
./ MODIFY myfile
./ MODIFY myfile
./ CLOSE_WRITE,CLOSE myfile

Поскольку вышеперечисленное не имеет перенаправления, весь вывод отображается на терминале.

Событие OPEN означает первоначальное создание файлов. События CLOSE указывают на то, что процесс завершен.

Точный набор событий, которые inotifywait покажет вам, зависит от того, какие системные вызовы использует отслеживаемая вами программа. Проведите тест, как описано выше, чтобы узнать.

person John1024    schedule 10.09.2014