Top.Mail.Ru

Rsync в Linux: примеры команд для копирования файлов и синхронизации через SSH

Rsync в Linux: примеры команд для копирования файлов и синхронизации через SSH

Копирование и синхронизация файлов с помощью rsync. Узнайте, как использовать команду rsync в Linux для резервного копирования и передачи данных через защищенное соединение SSH.

 

Команды:

rsync (remote synchronization - удалённая синхронизация)

rsync -a (archive - архив) - архивный режим

rsync -v (verbose - многословно) - подробный вывод информации о синхронизации

rsync -z (compress - сжатие) - сжатие данных при передаче

rsync -h (human-readable - человекочитаемый формат)

rsync -e - ввод команды для выполнения

rsync --delete - удаление файлов, которых нет в папке назначения

rsync --exclude='*.tmp' (exclude - исключить) - исключить все файлы .tmp

rsync --delete-excluded - удалять исключенные

 

Еще одна утилита для копирования файлов по сети называется rsync, которая в основном предназначена не просто для копирования, а для выполнения синхронизации файлов как локально, так и между удалёнными системами. Она минимизирует объем передаваемых данных, пересылая только изменённые части файлов, что ускоряет резервное копирование и синхронизацию.

rsync (remote synchronization - удалённая синхронизация)

Так как, чаще всего, данный процесс выполняется между удаленными системами, то давайте попробуем сделать следующее, выполним резервное копирование содержимого рабочего стола пользователя user-ubuntu на сервер ubuntu-srv

 

Ubuntu Client

rsync (remote synchronization) -a (archive) -v (verbose) -z (compress) -h (human-readable) -e "ssh -p 2222" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop

-a, --archive — архивный режим. Включает рекурсивное копирование каталогов и сохранение всех атрибутов файлов (права доступа, владельцы, время модификации и пр.).

-v, --verbose — подробный вывод информации о процессе копирования.

-z, --compress — сжатие данных при передаче для экономии трафика.

-h, --human-readable — вывод размера файлов в удобочитаемом формате (Кб, Мб и т.п.).

-e <команда> — указание оболочки или протокола для передачи (например, ssh).

--delete — удаление файлов в папке назначения, которых нет в исходной папке.

rsync -avzh -e "ssh -p 2222" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop

sending incremental file list
created directory /home/it-skills/user-ubuntu-desktop
Рабочий стол/
Рабочий стол/mtr_report.txt
sent 764 bytes  received 97 bytes  156,55 bytes/sec
total size is 3,45K  speedup is 4,01

Допустим, мы создали на рабочем столе директорию и переместили в неё наш файл mtr_report.txt, запустим синхронизацию еще раз.

rsync -avzh -e "ssh -p 2222" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop

sending incremental file list
deleting Рабочий стол/mtr_report.txt
Рабочий стол/
Рабочий стол/Создать папку/
Рабочий стол/Создать папку/mtr_report.txt

В логе говорится, что был удален файл mtr_report.txt, создана директория Создать папку, а в ней файл mtr_report.txt

Давайте создадим на рабочем столе файл 1c.tmp

cd ~/Рабочий стол

touch 1c.tmp

В чем суть, бывает, что нам нужно синхронизировать файлы, но исключить определенные типы файлов, как правило, это как раз связанно с временными файлами, которые помечаются как .tmp, чтобы не засорять файловый сервер. Тогда добавим к команде строку

--exclude='*.tmp' (exclude - исключить)

rsync -avzh -e "ssh -p 2222" --exclude="*.tmp" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop

Да, мы видим, что файл 1c.tmp не попал к нам на сервер.

Однако, что, если, данный файл уже был на сервере?

rsync -avzh -e "ssh -p 2222" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop

То выполнив данную команду с исключением, этот файл так же останется на удаленной машине, несмотря на то, что у нас есть ключ --delete

rsync -avzh -e "ssh -p 2222" --exclude="*.tmp" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop

Но, он не работает с исключениями, для того чтобы удалить исключенный файлы необходимо добавить ключ:

--delete-excluded - удалять исключенные

rsync -avzh -e "ssh -p 2222" --exclude="*.tmp" --delete --delete-excluded "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop

sending incremental file list
deleting Рабочий стол/1c.tmp

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

rsync -avzh -e "ssh -p 2222" --exclude="*.tmp" --exclude="Создать папку/" --delete --delete-excluded "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop

sending incremental file list
deleting Рабочий стол/Создать папку/123/234/345/
deleting Рабочий стол/Создать папку/123/234/
deleting Рабочий стол/Создать папку/123/
deleting Рабочий стол/Создать папку/mtr_report.txt
deleting Рабочий стол/Создать папку/

Утилита удалила все вложенные директории и файлы в данной папке, а также и саму папку.

Вот такие интересные приемы с синхронизацией мы можем выполнять.

Таким образом, rsync — универсальный инструмент для администраторов, позволяющий эффективно синхронизировать и выполнять резервное копирование данных с гибкими настройками передачи и исключения файлов, локально или по сети.