Синхронизировать локальный каталог с удаленным каталогом в Linux

14

У меня есть папка с несколькими файлами в ней, и немного места на веб-сервере. Я хочу сделать двунаправленную синхронизацию между локальной и удаленной папками в Linux, только во время модификации. Как мне это сделать? Кстати, я не могу ничего установить на сервере, для всех намерений и целей это просто пространство.

Примечание: у меня уже есть настроенные пары ключей rsa, так что это может произойти тихо.

Эндрю Редд
источник

Ответы:

12

Инструментом для однонаправленной синхронизации является rsync, а инструментом для двунаправленной синхронизации - Unison . Оба требуют, чтобы исполняемый файл был доступен с обеих сторон. Если вы можете сделать файл исполняемым на стороне сервера, отбросьте двоичный файл unison и сделайте его исполняемым.

Если у вас есть Linux, * BSD, Solaris или Mac OS X локально, вы, вероятно, можете использовать файловую систему FUSE, чтобы пространство веб-сервера отображалось как локальная файловая система - sshfs должен работать, поскольку у вас, похоже, есть доступ по ssh. Тогда используйте унисон «локально».

Также обратите внимание, что большинство программ контроля версий (CVS / Subversion, а также распределенные VCS) имеют синхронизацию в качестве дополнительной функции (регистрация на одном компьютере и выход на другом).

Жиль "ТАК - перестань быть злым"
источник
4

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

Чтобы сделать это двунаправленным, сделайте это (цитата из http://forums11.itrc.hp.com/service/forums/questionanswer.do?admit=109447626+1285799008594+28353475&threadId=1278777 ):

Для двунаправленной синхронизации каталога /src/fooна hostAк /dest/fooо hostB, включая все подкаталоги, вы бы запустить эти команды на hostA:

rsync -auz /src/foo hostB:/dest 
rsync -auz hostB:/dest/foo /src

Первая команда выталкивает все файлы, которые новее на hostAк hostB.

Вторая команда будет тянуть все файлы, которые новее на hostBк hostA. Критические варианты:

при копировании необходимо сохранить время изменения файла. -aделает это и другие вещи;

Если вы хотите сохранить только время модификации, используйте -tвместо этого.

Чтобы пропустить любые файлы, которые являются более новыми в месте назначения: -uделает это.

Tante
источник
насколько я прочитал, rsync не работает в двух направлениях, и когда я пытаюсь сделать это, я получаю сообщение об ошибке "Несоответствие версии протокола - чиста ли ваша оболочка?"
Эндрю Редд
hostanswers.net/linux-hosting/rsync-protocol-version-mismatch может помочь вам исправить несоответствие версий. Для двунаправленной вещи я обновил свой ответ.
танте
1
Rsync вообще не приспособлен для двунаправленной синхронизации. Во-первых, он не предупредит вас, если возникнет конфликт. Вместо этого используйте Unison, это правильный инструмент для работы.
Жиль "ТАК - перестать быть злым"
1
Это ужасно сломается, если сервер А будет в будущем от сервера Б. В моем случае я на 13 часов опережаю удаленный сервер.
Тим Пост
1

Каждый раз, когда вам нужна синхронизация между двумя папками rsync, это отличный выбор. Проблема в том, что rsync не будет поддерживать протокол ftp. Хороший обходной путь для этого - curlFtpFS :

CurlFtpFS - это файловая система для доступа к хостам FTP, основанная на FUSE и libcurl.

С помощью curlFtpFs довольно легко включить удаленную папку ftp в вашу файловую систему.

Это короткий пример, который показывает использование обоих инструментов:

curlftpfs -r -s ftp.foobar.com /foo
rsync -a /foo/ /bar
umount /foo

Прочитайте man-страницу для получения дополнительной информации.

Если вам не нужны такие усилия для установки curlFtpFS и вы просто хотите синхронизировать некоторые файлы, существует множество инструментов ftp, которые предлагают такие функции синхронизации:

  • FTPSync.pl - простой PERL-скрипт для синхронизации локального и удаленного каталога
  • weex - неинтерактивный FTP-клиент для обновления веб-страниц
  • filezilla - FTP-клиент с большим количеством функций
  • ...
echox
источник
1. Rsync не подходит для двунаправленной синхронизации, используйте вместо этого Unison. 2. Откуда пришел FTP? упоминание ключей RSA в этом вопросе скорее предполагает использование ssh (и, следовательно, sshfs).
Жиль "ТАК ... перестать быть злым"
Вы правы, FTP не упоминается в вопросе. Честно говоря, я думаю, что это было сочетание «веб-пространство» и «это просто пространство». и немного моей усталости вчера.
echox