20071123

Синхронизация каталогов по SSH и по FTP

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

Пусть есть два каталога: на локальной машине и на удалённой. Предполагаем, что изменения происходит только в одном месте (для объединения параллельных изменений нужно использовать средства управления версиями вроде subversion, а не средства синхронизации). Нужно перенести все произошедшие изменения в другой из них. Это и есть задача синхронизации.

Обычно синхронизация двух каталогов делается с помощью Rsync и SSH.

Пусть изменяется удалённый каталог, копируем его на локальную машину так:
$ rsync -avz --delete -e ssh логин@удалённый.хост:путь/откуда/ путь/куда

Если же «отражаем» локальный каталог на удалённую машину (выкладываем изменённый сайт на хостинг), то
$ rsync -avz --delete -e ssh путь/откуда/ логин@удалённый.хост:путь/куда

Полезно поиграться с командой добавляя и убирая слэш («/») после названия исходного каталога, чтобы понять, что он делает (или почитать man rsync). Потренироваться, кстати, можно и с двумя локальными каталогами.

Если удалять файлы, исчезнувшие в исходном каталоге, но присутствующие в целевом, не нужно — ключ --delete убрать.

Всё это хорошо, да вот только доступ по SSH есть далеко не всегда (например, если хостинг дешёвый...). Иногда требуется синхронизировать каталоги по FTP. Это умеет программка lftp. О том, как пользоваться lftp, уже писали. Поэтому напишу кратко по теме, а остальное — см. man lftp.

Вытянуть каталог с удалённого сервера (синхронизировать локальный каталог с удалённым):
$ lftp -e 'mirror -e каталог-на-сервере локальный-каталог; bye;' -u логин,пароль удалённый.хост

И наоборот, выложить локальный каталог на удалённый сервер:
$ lftp -e 'mirror -R локальный-каталог каталог-на-сервере; bye;' -u логин,пароль удалённый.хост


Это, конечно, можно делать и используя lftp в интерактивном режиме. Если команде mirror параметры не давать, то синхронизуются текущий удалённый и текущий локальный каталог.

Конечно, если задачи синхронизации не стоит, а нужно просто выложить или скачать каталог со всеми подкаталогами, то тогда задачу можно решить проще, scp -r или рекурсивный put, имеющийся во многих других FTP-клиентах, для этого будут достаточны.

Смотрите также:

Резервное копирование и шифрование архивов с помощью cpio (или tar) и gpg