Мониторинг событий в файловой системе, как они происходят - PullRequest
11 голосов
/ 28 июня 2011

Я хочу написать скрипт на Ruby или Python, который будет проверять содержимое каталога и монитора для

1. Any new files
2. Any saves to existing files. 

Меня не беспокоит, что в файлах отличается - просточто они были сохранены или являются новыми.

Затем сценарий возвращает имя файла (с полным путем), возможно, каждые 2 секунды или что-то в этом роде.

Я хочу сканировать файлы в папках, чтобы

mainfile.txt
images/image1.jpg
images/icons/icon1.png

Все эти файлы / папки необходимо отслеживать.

В конце концов я хочу отправить по FTP файлы, которые были изменены / добавлены, но я рад согласиться с решением первой части проблемы, так как я знаю, как работать с ftp (но во что бы то ни стало, еслиВы хотите!)

Я использую OSX 10.5.8

Ответы [ 5 ]

6 голосов
/ 01 июля 2011

Для рубина вот драгоценный камень, который может вам помочь: https://github.com/thibaudgg/rb-fsevent

FSEvent - это система, которую вы хотите использовать в OS X, и это привязка, переносящая ее в Ruby, этот драгоценный камень используется Guardвот как я это нашел.(https://github.com/guard/guard)

Вы могли бы даже рассмотреть возможность использования Guard, который предоставляет хороший API для отслеживания файлов / путей и запуска действий над изменениями.

Редактировать: С тех пор, как я это опубликовал, был выпущен новый гем для абстрактной платформывещи: https://github.com/guard/listen, этот гем предоставляет переносной API для мониторинга событий файловой системы на нескольких платформах

3 голосов
/ 01 июля 2011

Ах, смотрю FTP.Как это случилось, я построил что-то подобное для работы.В то время как мой имел дело с несколькими ограничениями, я надеюсь, что вы не имеете, часть, которая сидела на Linux, была легкой.OSX в наше время - в основном переупакованный linux.

Итак, вы сможете установить iwatch , который использует функцию ядра inotify.Если вы не можете использовать сам iwatch, что было бы очень удивительно, так как оно написано на perl, то источник должен указать вам, как напрямую общаться с inotify. Эта ссылка содержит информацию об использовании python с inotify.

Есть несколько других альтернатив iwatch, но все они подключаются к inotify.Единственной альтернативой является ручное сканирование каталогов по таймеру, что неуклюже и его следует избегать.Я сделал это на окнах, и у него есть .... проблемы.Если я когда-нибудь получу шанс, я переработаю этот раздел.

2 голосов
/ 15 мая 2012

Я создал рубиновый гем на основе guard для синхронизации файлов с ftp при возникновении событий файловой системы, как в Dreamweaver.Он немного молодой, но я использовал его в последние недели без проблем.

Он называется guard-ftpsync , и я считаю, что он решает именно ту проблему, которая у вас есть.

1 голос
/ 30 июня 2011

Я бы рекомендовал использовать инструмент, разработанный для того, что вы описываете - rsync.

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

rsync -a mainfile.txt images/image1.jpg images/icons/icon1.png remotehost:/directory/to/sync/files/to

Если вы также хотите получить список файлов, которые были синхронизированы, вы можете настроить ведение журнала rsync, добавив:

-q --log-format="%f"

Однако даже это не похоже на то, что вы ищете. Похоже, вам нужна быстрая файловая система, а не частая копия.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...