Пусть есть два каталога: на локальной машине и на удалённой. Предполагаем, что изменения происходит только в одном месте (для объединения параллельных изменений нужно использовать средства управления версиями вроде 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-клиентах, для этого будут достаточны.