Заметки кодящего дизайнера

Как синхронизировать локальную папку с сервером при помощи 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.