Наблюдайте за изменениями файловой системы и rsync кроссплатформенным способом с минимальными зависимостями

2093
John Feminella

Я хотел бы запустить долго работающий скрипт на Ruby или Python и заставить скрипт наблюдать за локальным каталогом на предмет изменений файлов и новых файлов. Периодически скрипт запускает одностороннюю rsync для удаленного сетевого расположения.

Это должно работать как в среде Linux (Ubuntu 13.10+), так и Windows (Windows 7+). Важно отметить, что я хотел бы свести к минимуму количество необходимых зависимостей, и я хотел бы установить одно и то же в каждой системе, просто отбрасывая некоторые файлы в каталог - без установщика.

Можно ли получить желаемую систему без установщика? Если так, то как?

0
Кстати, Rsync имеет возможность отслеживать изменения. Ricky Beam 10 лет назад 0
@RickyBeam: я должен контролировать изменения программным способом, который не подходит для параметров командной строки rsync. Но спасибо за хедз-ап! John Feminella 10 лет назад 0
@RickyBeam это правда? как? laggingreflex 7 лет назад 0

3 ответа на вопрос

1
Timothy C. Quinn

В прошлом, когда я делал это с платформы Windows на любую другую систему, которая поддерживает sshd или sftp, я использовал WinSCP, который имеет очень хорошо написанные функции синхронизации. WinSCP также может быть запущен из командной строки для просмотра локального каталога и автоматического отправки и / или извлечения файлов в удаленную файловую систему по протоколам SCP или SFTP.

Решение WinSCP очень надежно и легко настраивается, но написано для Windows.

Я получил WinSCP для установки на мою Linux-машину, используя 32-битную версию Wine, и она работает достаточно хорошо, хотя я еще не пробовал запускать функцию синхронизации из CLI на linux. Я уверен, что CLI будет работать над Linux в ближайшее время, когда у меня будет время сосредоточиться на этом.

0
pxul

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

Я не знаком с программированием (python или иным способом) на машинах Windows, но для Windows существует порт inotifywait в форме inotify-win, который после создания исполняемого файла можно запускать из скрипта через подпроцесс. с минимальными изменениями платформы для версии Linux.

Что касается второй части вашего вопроса, вы можете перейти на SFTP с использованием paramiko, однако, похоже, что зависимость от PyCrypto может сделать эту опцию немного сложной с точки зрения Windows.

Я понимаю, что это не полный ответ на все части вашего вопроса, но, надеюсь, здесь есть кое-что, что вы найдете полезным.

0
Charl Botha

I've heard good things about https://pypi.python.org/pypi/watchdog - a Python library for the monitoring of filesystem events that works on Linux, OSX, FreeBSD and Windows.

I would use something like bbfreeze or pyinstaller to package your whole tool up into binaries for the various different platforms. rsync already has installers for most systems.