Как синхронизировать локальную папку с сервером при помощи rsync
Конкретная задача выглядела так: есть сайт у которого есть папка с изображениями, которые потом добавляются в записи. Загружать картинки через интерфейс админ-панели сайта не очень удобно и пока не дошли руки доработать админку, я решил сделать локальную копию директории на компьютере и сихронизировать её с сервером.
Для этой задачи идеально подходит утилита rsync
.
Итак, имеем:
- директорию на сайте —
/server/path/target-folder/
; - директорию на локальном компьютере —
/local/path/target-folder/
Правила синхронизации:
- файл исчез — удаляем;
- файл изменился — обновляем;
- файл добавился — копируем;
- файл неизменен — ничего не делаем, экономим время и траффик.
Команда для апдейта будет такой:
rsync -av --delete /local/path/target-folder/ user_name@ip_address:/server/path/target-folder/
Вначале указываем точку отправки, в конце адрес назначения. То есть выше мы отправляем изменения с локального компьютера на сервер, а для изменения направления надо будет поменять пути местами.
Особенности:
-a
(archive) — сохраняет права, временные метки, символические ссылки и прочие атрибуты.-v
(verbose) — показывает процесс синхронизации.--delete
— удаляет файлы на сервере, если их нет на локальном компьютере./
в конце пути указывает, что содержимоеtarget-folder
копируется внутрьtarget-folder
на сервере.
Если нужно исключить какие-то файлы или папки, то можно добавить --exclude="pattern"
, например:
rsync -av --delete --exclude="*.log" /local/path/target-folder/ user_name@ip_address:/server/path/target-folder/
Если хочется видеть прогресс копирования, можно добавить --progress
.