Rsync
Rsync — утилита для быстрого копирования и синхронизации файлов и каталогов. Она умеет передавать только изменившиеся данные, сохранять метаданные, работать через SSH и удалять файлы, отсутствующие в источнике.
Содержание
- Синтаксис
- Основные параметры
- Архивный режим
- Завершающий слеш
- Базовые примеры
- Зеркальная синхронизация
- Исключение файлов
- Копирование только определённых файлов
- Возобновление прерванной передачи
- Резервное копирование изменённых файлов
- Ограничение размера и скорости
- Права доступа и владельцы
- Символические ссылки
- Сравнение файлов
- Формат `--itemize-changes`
- Перемещение файлов
- Работа с путями, содержащими пробелы
- Запуск через `sudo` на удалённом сервере
- Использование rsync-демона
- Полезные готовые команды
- Коды завершения
- Рекомендации по безопасности
- Получение встроенной справки
Синтаксис
rsync [ОПЦИИ] ИСТОЧНИК НАЗНАЧЕНИЕЛокальное копирование:
rsync [ОПЦИИ] /путь/к/источнику/ /путь/к/назначению/Копирование на удалённый сервер:
rsync [ОПЦИИ] /локальный/путь/ user@host:/удалённый/путь/Копирование с удалённого сервера:
rsync [ОПЦИИ] user@host:/удалённый/путь/ /локальный/путь/Основные параметры
| Параметр | Назначение |
|---|---|
-a, --archive |
Архивный режим: рекурсивное копирование с сохранением большинства метаданных |
-r, --recursive |
Рекурсивное копирование каталогов |
-v, --verbose |
Подробный вывод |
-q, --quiet |
Минимальный вывод |
-h, --human-readable |
Размеры в удобном для чтения формате |
-z, --compress |
Сжатие данных при передаче |
-P |
Эквивалент --partial --progress |
--progress |
Показывать ход передачи |
--info=progress2 |
Показывать общий прогресс операции |
-n, --dry-run |
Пробный запуск без изменения файлов |
-c, --checksum |
Сравнивать файлы по контрольной сумме |
-u, --update |
Не перезаписывать более новые файлы в назначении |
--delete |
Удалять в назначении файлы, которых нет в источнике |
--exclude=ШАБЛОН |
Исключить файлы или каталоги |
--include=ШАБЛОН |
Включить файлы по шаблону |
--exclude-from=ФАЙЛ |
Читать исключения из файла |
-e КОМАНДА |
Указать транспорт, обычно SSH |
-L, --copy-links |
Копировать содержимое, на которое указывают символические ссылки |
--backup |
Создавать резервные копии заменяемых и удаляемых файлов |
--backup-dir=КАТАЛОГ |
Сохранять резервные копии в отдельном каталоге |
--remove-source-files |
Удалять исходные файлы после успешной передачи |
--max-size=РАЗМЕР |
Не передавать файлы больше указанного размера |
--min-size=РАЗМЕР |
Не передавать файлы меньше указанного размера |
--bwlimit=СКОРОСТЬ |
Ограничить скорость передачи |
--stats |
Показать статистику после завершения |
--itemize-changes |
Подробно показать типы изменений |
Архивный режим
Параметр -a примерно соответствует комбинации:
-rlptgoDОн включает:
- рекурсивное копирование;
- сохранение символических ссылок;
- сохранение прав доступа;
- сохранение времени изменения;
- сохранение владельца и группы, если хватает прав;
- сохранение файлов устройств и специальных файлов.
Архивный режим не включает сохранение ACL, расширенных атрибутов и жёстких ссылок. При необходимости используются:
rsync -aAXH источник/ назначение/Где:
-A— сохранить ACL;-X— сохранить расширенные атрибуты;-H— сохранить жёсткие ссылки.
Завершающий слеш
Завершающий / у источника имеет важное значение.
Скопировать содержимое каталога source:
rsync -a source/ destination/Результат:
destination/file1
destination/file2Скопировать сам каталог source:
rsync -a source destination/Результат:
destination/source/file1
destination/source/file2Базовые примеры
Локальное копирование
rsync -avh /home/user/documents/ /backup/documents/Копирование с отображением общего прогресса
rsync -ah --info=progress2 /data/ /backup/data/Копирование на сервер через SSH
rsync -avz /local/data/ user@example.com:/remote/data/Загрузка данных с сервера
rsync -avz user@example.com:/remote/data/ /local/data/Использование нестандартного SSH-порта
rsync -avz -e "ssh -p 2222" /local/data/ user@example.com:/remote/data/Использование SSH-ключа
rsync -avz -e "ssh -i ~/.ssh/backup_key" \
/local/data/ user@example.com:/remote/data/Зеркальная синхронизация
Чтобы назначение стало зеркальной копией источника:
rsync -avh --delete /source/ /destination/Осторожно:
--deleteудаляет из назначения файлы, которых нет в источнике. Перед запуском рекомендуется проверить команду с--dry-run.
Проверка:
rsync -avhn --delete /source/ /destination/Если результат ожидаемый, выполните команду без -n:
rsync -avh --delete /source/ /destination/Варианты удаления:
| Параметр | Поведение |
|---|---|
--delete-before |
Удалять лишние файлы до передачи |
--delete-during |
Удалять в процессе передачи |
--delete-after |
Удалять после передачи |
--delete-excluded |
Удалять также файлы, исключённые фильтрами |
--max-delete=N |
Удалить не более N файлов |
Исключение файлов
Исключить один каталог:
rsync -av --exclude='cache/' /source/ /destination/Исключить несколько типов файлов:
rsync -av \
--exclude='*.tmp' \
--exclude='*.log' \
--exclude='.git/' \
/source/ /destination/Использовать файл с исключениями:
rsync -av --exclude-from='exclude.txt' /source/ /destination/Пример exclude.txt:
*.tmp
*.log
.cache/
node_modules/
.git/Правила шаблонов
*.log Все файлы с расширением .log
cache/ Каталоги с именем cache
/cache/ Каталог cache в корне источника
temp/** Всё содержимое каталога temp
file?.txt Например file1.txt или fileA.txtКопирование только определённых файлов
Скопировать только файлы .jpg, сохранив структуру каталогов:
rsync -av \
--include='*/' \
--include='*.jpg' \
--exclude='*' \
/photos/ /backup/photos/Порядок правил --include и --exclude важен: применяется первое совпавшее правило.
Возобновление прерванной передачи
Сохранить частично переданные файлы и показывать прогресс:
rsync -avP /large-files/ user@host:/backup/Хранить временные части файлов в отдельном каталоге:
rsync -av \
--partial \
--partial-dir='.rsync-partial' \
/large-files/ user@host:/backup/Для больших файлов, изменяемых внутри, можно использовать:
rsync -av --inplace /source/ /destination/--inplace записывает изменения прямо в существующий файл. Этот режим требует осторожности: при прерывании операции файл назначения может оказаться неполным.
Резервное копирование изменённых файлов
Сохранять заменяемые и удаляемые файлы в отдельном каталоге:
rsync -av --delete \
--backup \
--backup-dir="/backup/changed/$(date +%F)" \
/source/ /backup/current/Структура будет выглядеть примерно так:
/backup/current/ Текущая копия
/backup/changed/2026-09-10/ Предыдущие версии изменённых файловОграничение размера и скорости
Не копировать файлы больше 500 МБ:
rsync -av --max-size=500M /source/ /destination/Копировать только файлы размером от 1 МБ:
rsync -av --min-size=1M /source/ /destination/Ограничить скорость примерно до 5 МБ/с:
rsync -av --bwlimit=5M /source/ user@host:/destination/Поддерживаемые суффиксы размеров включают K, M, G и T. Точное толкование единиц может зависеть от версии rsync.
Права доступа и владельцы
Сохранить стандартные метаданные:
rsync -a /source/ /destination/Если команда выполняется без прав суперпользователя, сохранить владельца или некоторые специальные файлы может быть невозможно.
Не переносить владельца и группу:
rsync -a --no-owner --no-group /source/ /destination/Назначить владельца и группу на принимающей стороне:
sudo rsync -a --chown=www-data:www-data /source/ /var/www/site/Изменить права при копировании:
rsync -a \
--chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r \
/source/ /destination/Здесь D обозначает каталоги, а F — обычные файлы.
Символические ссылки
Сохранить ссылки как ссылки:
rsync -a /source/ /destination/Копировать файлы и каталоги, на которые указывают ссылки:
rsync -aL /source/ /destination/Копировать только ссылки, указывающие внутрь дерева источника:
rsync -a --safe-links /source/ /destination/Сравнение файлов
По умолчанию rsync определяет изменения преимущественно по размеру и времени модификации.
Принудительное сравнение по контрольным суммам:
rsync -avc /source/ /destination/Параметр -c повышает точность проверки, но увеличивает нагрузку на процессор и диски, поскольку содержимое файлов необходимо прочитать полностью.
Проверить различия без копирования:
rsync -avnc --itemize-changes /source/ /destination/Формат --itemize-changes
Команда:
rsync -ani --delete /source/ /destination/может выводить строки вида:
>f.st...... document.txt
.d..t...... reports/
*deleting old-file.txtПервый символ обычно показывает направление или характер изменения:
| Символ | Значение |
|---|---|
> |
Файл передаётся в назначение |
< |
Файл передаётся обратно |
c |
Локальное изменение или создание |
h |
Изменение жёсткой ссылки |
. |
Содержимое файла не передаётся |
* |
Специальное сообщение, например удаление |
Следующие символы описывают изменение размера, времени, прав, владельца, группы и других атрибутов.
Перемещение файлов
Передать файлы и удалить успешно переданные исходники:
rsync -av --remove-source-files /source/ /destination/Пустые исходные каталоги автоматически не удаляются. Их можно удалить отдельной командой после успешного завершения:
find /source -type d -empty -deleteПеред использованием проверьте пути и сначала выполните пробный запуск.
Работа с путями, содержащими пробелы
Локальные пути заключаются в кавычки:
rsync -av "/home/user/My Documents/" "/backup/My Documents/"Для удалённых путей безопаснее передавать путь через аргумент, сохраняя корректное экранирование:
rsync -av "/local/data/" "user@host:/remote/My Documents/"Поведение путей с пробелами может различаться в зависимости от оболочки и версии rsync. При сложных именах полезно применять --protect-args:
rsync -av --protect-args "/local/data/" "user@host:/remote/My Documents/"Запуск через sudo на удалённом сервере
Если удалённой стороне требуются повышенные права:
rsync -av \
--rsync-path="sudo rsync" \
/local/data/ user@host:/protected/path/На сервере для пользователя должен быть корректно настроен sudo. Интерактивный запрос пароля может помешать автоматическому выполнению.
Использование rsync-демона
Подключение к модулю демона:
rsync -av /local/data/ host::module/path/Альтернативная запись:
rsync -av /local/data/ rsync://host/module/path/Просмотр доступных модулей:
rsync host::Режим демона отличается от передачи через SSH и требует отдельной настройки rsyncd.
Полезные готовые команды
Надёжное копирование каталога через SSH
rsync -aPz --info=progress2 \
/local/data/ user@host:/remote/data/Безопасная предварительная проверка зеркалирования
rsync -avhn --delete --itemize-changes \
/source/ /destination/Зеркалирование после проверки
rsync -avh --delete \
/source/ /destination/Резервная копия с исключениями
rsync -aP \
--exclude='.cache/' \
--exclude='*.tmp' \
--exclude='node_modules/' \
/home/user/ /backup/user/Копирование с сохранением ACL и расширенных атрибутов
sudo rsync -aAXH --numeric-ids \
/source/ /destination/Синхронизация сайта с сервером
rsync -avz --delete \
--exclude='.git/' \
--exclude='.env' \
--exclude='node_modules/' \
./ user@example.com:/var/www/site/Коды завершения
Проверить код завершения последней команды:
echo $?Распространённые коды:
| Код | Значение |
|---|---|
0 |
Успешное завершение |
1 |
Синтаксическая ошибка или некорректные параметры |
2 |
Несовместимость протокола |
3 |
Ошибка выбора файлов или каталогов |
5 |
Ошибка запуска клиент-серверного протокола |
10 |
Ошибка ввода-вывода сокета |
11 |
Ошибка файлового ввода-вывода |
12 |
Ошибка потока данных протокола |
20 |
Получен сигнал завершения |
23 |
Частичная передача из-за ошибки |
24 |
Частичная передача: исходные файлы исчезли |
30 |
Превышено время ожидания передачи |
35 |
Превышено время ожидания подключения демона |
Рекомендации по безопасности
Перед командами с --delete, --remove-source-files, --inplace или --delete-excluded всегда выполняйте пробный запуск:
rsync -avhn --delete /source/ /destination/Проверяйте:
- направление копирования;
- наличие завершающего
/; - правильность источника и назначения;
- список удаляемых файлов;
- правила
--excludeи--include; - доступное место на диске;
- права пользователя на обеих сторонах.
Получение встроенной справки
Краткая справка:
rsync --helpПолное руководство:
man rsyncВерсия программы:
rsync --version