Если ты думаешь, что копирование файлов — это просто “скопировать и забыть”, значит, ты либо новичок, либо крутишься в каких-то учебниках с розовыми пони и единорогами. Rsync — это тот самый древний и мёртвый, но очень живучий зверь, что таскает твои данные, не переписывая лишнего и не нудя на каждом шагу. И да, он бывает капризен, но без него ИТ-шнику — как без рук.

Установка — да не такая это и великая проблема

Почти на всех современных Linux и macOS rsync уже стоит и ждёт, пока ты его используешь. Но если по каким-то причинам нет — не парься, устанавливай через менеджер пакетов и не ной.

Ubuntu/Debian:

sudo apt install rsync

CentOS/Fedora:

sudo yum install rsync

Всё. Тупо, просто, работает.

Основы синтаксиса — быстро, чтоб запомнил и не накосячил

Rsync — это утилита, которая таскает файлы с одного места в другое. Тут три сценария:

  • Локально → Локально
  • Локально → Удалённо
  • Удалённо → Локально

Пример простого вызова:

rsync [опции] источник назначение

Где:

  • опции — флаги, что говорят, как копировать
  • источник — откуда копируем
  • назначение — куда кладём

Если копируешь с удалённого сервера — добавь user@host: перед путём.

Что реально стоит знать из опций — минимум для выживания

  • -a (--archive) — включает почти всё, что нужно: рекурсия, сохранение прав, симлинков, времени и прочего. Не парься — всегда ставь.
  • -z (--compress) — если твой канал дерьмовый, включи сжатие, чтобы меньше гнать по сети.
  • -P — прогресс и докачка. Если передаёшь большие файлы и сеть нестабильна — твой лучший друг.
  • --delete — удаляет лишнее в папке назначения. Полезно, если хочешь точное зеркало, но аккуратно, не перепутай с путями.
  • -q — тихий режим, чтоб не засорять терминал.
  • -e — указываешь, какую оболочку использовать для удалённого подключения, обычно ssh, но можно и кастом.

Практика — примеры из жизни

Копируем файл локально, не парясь

rsync -a /opt/filename.zip /tmp/

Если надо переименовать файл при копировании:

rsync -a /opt/filename.zip /tmp/newfilename.zip

Копируем целый каталог — и не забываем про слэш!

Разница между /path/dir и /path/dir/ — это не просто слэш, а реальный повод выебнуться.

rsync -a /var/www/domain.com/public_html/ /var/www/domain.com/public_html_backup/

Здесь копируется только содержимое папки public_html в public_html_backup.

А если забыть слэш, то будет:

rsync -a /var/www/domain.com/public_html /var/www/domain.com/public_html_backup/

В этом случае скопируется сама папка public_html со всем содержимым внутрь public_html_backup. И иногда это ломает сценарии.

Копируем на удалённый сервер

rsync -a /opt/media/ user@remote_host:/opt/media/

Принимающая сторона должна иметь rsync, иначе будешь мучиться.

Если SSH на порту, отличном от стандартного 22:

rsync -a -e "ssh -p 2322" /opt/media/ user@remote_host:/opt/media/

Копируем с удалённого сервера на локалку

rsync -a user@remote_host:/opt/media/ /opt/media/

Исключаем мусор, чтоб не таскать весь ненужный хлам

Ты, конечно, можешь таскать всё подряд, но зачем? Чтобы не тратить время и место, используешь --exclude или --exclude-from.

rsync -a --exclude=node_modules --exclude=tmp /src_directory/ /dst_directory/

Если список большой, делай отдельный файл с путями и кидай его:

rsync -a --exclude-from='/exclude-file.txt' /src_directory/ /dst_directory/

Что ещё?

Запускай в screen или tmux, если передаёшь по долгу — чтобы не рвать сессию и не материться на обрыв.

Если есть сомнения — всегда проверяй путь, а то --delete может послать в топку не то, что нужно.

Rsync не любит когда ты меняешь слеши и пути на ходу — уважай его правила, иначе он тебя посылает.

Итог

Rsync — это не игрушка, а инструмент для тех, кто понимает, что копирование — это работа и нервотрёпка одновременно. Он дикий, умный и жесткий. Крути его как хочешь, но уважай.

Если хочешь надежные бэкапы, а не цирк с конями, — смотри в сторону rsync. Но помни: никакой утилитой не заменить голову и внимательность.