rsync — быстрая и гибкая программа, позволяющая копировать файлы на/с удалённых машин.
Программа широко используется для создания резервных копий и зеркал, а также в качестве улучшенной версии команды cp.
Задача: скопировать всю директорию (включая все файлы) размером более 50ГБ с удаленного сервера под управлением Debian/Ubuntu.
Решение: Воспользуемся утилитой rsync. Подробная информация.
Общий синтаксис команд достаточно простой.
rsync [ОПЦИИ...] ОТКУДА... [КУДА]
Pull (получение):
rsync [ОПЦИИ...] [USER@]HOST:ОТКУДА... [КУДА]
Push (отправка):
rsync [ОПЦИИ...] ОТКУДА... [USER@]HOST:КУДА
Следуя этим схемам давайте выполним нашу поставленную задачу.
rsync --archive --verbose --progress -e "ssh -p 22888" root@00.000.00.000:/var/www/site/ ~/newsite/public_html
Данная команда скопирует всё содержимое директории /var/www/site/ удалённой машины в домашнюю директорию пользователя /newsite/public_html текущей машины (с которой осуществлялось подключение).
Данный пример рассматривает подключение по нестандартному ssh порту 22888 (по умолчанию 22-ой).
Опции:
- —archive (можно сокращённо -a) команда для удобства объединяет в себе ряд других команда (равносильно -rlptgoD). То есть, утилита пройдёт рекурсивно по всем вложенным каталогам, перенесёт символические ссылки как символические ссылки ( -l ), сохранит изначальные права доступа к файлам ( -p ), сохранит время модификации ( -t ) и т.д.
- —verbose вывод подробной информации о процессе синхронизации.
- —progress показывать строку прогресса для синхронизации.
- -e указывает удаленную оболочку для подключения (использования)
Рекомендация
При неуверенности запускайте в пробном режиме, при котором ничего не произойдёт, а только утилита продемонстрирует в консоли свою работу, но файлы скопированы не будут. Для этого нужно добавить опцию —dry-run
В таком случае наша консольная команда может выглядеть вот так:
sudo rsync --dry-run -azvv -e ssh /home/path/folder1/ ЮЗЕР@ХОСТ:/home/path/folder2
На что обратить внимание?
- Это закрывающие слэши. Закрывающий слэш означает «внутреннее содержимое». То есть, если в случае /var/www/site/ убрать закрывающий слэш /var/www/site то в итоге будет создана эта директория и мы получим немного неожиданный результат. Наши копируемые файлы окажутся вот тут /newsite/public_html/site
- При этом, наличие или отсутствие закрывающего слэша в имени директории, в которую будет происходить копирование, значения не имеет. Важно обращать внимание на слэш источника.
- Это символы двоеточия при подключении к удалённым машинам.