Каков простой способ синхронизации содержимого на моем локальном компьютере с содержимым на удаленном сервере с помощью терминала/Unix?

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

Долгая история :

У меня есть папка, masterгде я храню кучу данных. Эти данные организованы в папки, содержащие фактические файлы text/json. Предположим , masterсодержит папки с именами folder1, folder2и т. д. Происходит следующее: masterобновляются новые данные, содержащиеся в folderiпапке ith. Эти новые папки можно добавить в любое время. Я мог бы вручную scp(как я был) и отправить все данные на свой компьютер. Однако делать это крайне утомительно. В идеале я хотел бы иметь возможность использовать что-то вроде того, gitгде программа сама по себе фигурируетто, что на самом деле нуждается в обновлении. Загвоздка git в том, что он хранит данные в облаке и в системе контроля версий. Я не (полностью) против хранения вещей в облаке, но контроль версий не требуется, однако в идеале я отправляю данные только себе (к сожалению, github устанавливает квоты на хранение данных, поэтому я не могу это использовать).

Я использовал scp -r user@loc:/loc/master .для отправки всех своих данных, но кажется, что на самом деле он не проверяет, какие данные у меня уже есть, а просто продолжает и повторно отправляет все. Это действительно занимает много времени, потому что алгоритм должен работать в порядке добавления, а не в истории содержимого master. Есть ли у кого-нибудь программное обеспечение/инструмент/библиотека и т. д., которые могут легко работать на терминале для обновления моего materкаталога? Требования к идее:

  1. Обновляет основную (или master) папку при обновлении/изменении в папке, а не во всей истории или во всем содержимом.
  2. Мне не нужно вручную указывать каждую папку, только masterпапку, и она отправляет только то, что нужно обновить (по сути, как git, но без контроля версии)

В идеале синхронизация с удаленным файлом должна быть бесшовной.


Я думал об использовании Dropbox в своих учреждениях, что, по сути, означает, что у меня есть место для хранения, однако я не уверен на 100%, как лучше всего настроить такую ​​​​автоматическую синхронизацию с Dropbox только с помощью терминала.

Не уверен, что это будет проблемой, но некоторые из этих файлов/данных генерируются скриптами. Не уверен, что Dropbox будет, но если он сходит с ума в середине выполнения моих файлов, потому что пытается синхронизироваться, это будет очень раздражающе (или если он решит объявить конфликты слияния во время выполнения, что также будет очень раздражать). По этим причинам я не был уверен, что было бы плохой идеей использовать Dropbox, но на самом деле это может быть просто прекрасно, если он не ведет себя странно. Если он без проблем синхронизируется, это круто, но если мне нужно указывать только изредка (только каждый раз, когда происходит изменение содержимогоmaster), что он должен обновиться из-за новой папки, это тоже круто. Я просто беспокоюсь о странной проблеме синхронизации, которая может возникнуть, когда файл на самом деле записывается ... может быть, Dropbox может это сделать, но я не знаю, как это сделать.


Система должна работать с файловыми системами Unix. По сути, я использую локально OS X и удаленно какой-то Linux.

Ответы (1)

Я рекомендую lsyncd для этой цели. Он отслеживает ваш локальный каталог на наличие новых файлов, а затем использует rsyncих для передачи данных в место назначения. rsyncвыполняет добавочное резервное копирование , что означает, что он передает только файлы, которые изменились между источником и местом назначения. Он может работать в режиме демона в фоновом режиме. Я использую его ежедневно для синхронизации локального каталога с удаленным сервером, и он отлично работает:

$ lsyncd -rsync /media/data/music /mnt/r/music

Я использую только его, Linuxно он также поддерживает MacOS.