Синхронизация каталогов по 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-клиентах, для этого будут достаточны.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>