rsync
Материал из Xgu.ru
Автор: Владимир Кореньков
rsync (англ. Remote Synchronization) — программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодировку данных при необходимости.
Содержание |
[править] Примеры работы с данными на локальной машине
[править] Простое копирование файлов
В принципе, команда ср отлично выполняет свою функцию, за исключением небольшой прихоти -- при копировании больших файлов хотелось бы знать сколько времени осталось до завершения операции (т.е. всего-навсего нужно вывести прогресс операции копирования).
Данную задачу можно решить несколькими способами:
1) Использовать команду scp (потребует ввода пароля пользователя, а также ввода полного пути к каталогам):
scp -r <что копировать> localhost:<куда копировать>
2) Использовать команду rsync с ключом --progress:
rsync --progress -av <что копировать> <куда копировать>
При копировании каталогов (а не файлов) в последнем случае следует обратить внимание на знак "/" замыкающий имя каталога-источника, т.к. команда rsync будет интерпретировать результат по-разному:
rsync --progress -av <каталог-источник> <каталог-назначения/> rsync --progress -av <каталог-источник/> <каталог-назначения/>
Наличие завершающих слешей "/" обязательно, иначе результат копирования будет содержать корневую папку <каталог-источник> внутри <каталога-назначения>.
Копирование файла а из dir1 в dir2:
scp /home/dir1/a localhost:/home/dir2/
Копирование каталога из dir1 в dir2:
scp -r /home/dir1/ localhost:/home/dir2/
Копирование файла а из dir1 в dir2:
rsync --progress -av ~/dir1/a ~/dir2/
Копирование файлов из dir1 в dir2:
rsync --progress -av ~/dir1/ ~/dir2/
Копирование самой директории dir1 (со всем содержимым) в dir2:
rsync --progress -av ~/dir1 ~/dir2/
[править] Синхронизация каталогов
Точная копия каталогов (удаление всех файлов из dir2, которых нет в dir1):
rsync --delete -av ~/dir1/ ~/dir2/
Исключить каталоги, синхронизация которых не требуется (например, каталог dir3 находящийся в dir1 при копировании последнего в dir2 будет пропущен):
rsync -av ~/dir1/ --exclude="./~dir3/" ~/dir2/
Двусторонняя синхронизация (объединить содержимое dir1 и dir2)
rsync -av ~/dir1/ ~/dir2/ && rsync -av ~/dir2/ ~/dir1/
[править] Как копировать большие файлы и докопировать их в случае обрыва связи?
Нужно использовать ключи --partial (-P) и --append-verify.
Ключ --partial говорит о том, что нужно оставлять даже не полностью скопированные файлы, а --append-verify говорит о том, что если файл уже есть нужно проверить, возможно он не полностью синхронизирован, и синхронизировать остаток.
Подробнее:
[править] Работа с удаленной машиной
Копирование через SSH (аналог scp)
rsync -av --rsh=ssh user@host:dir1/ ~/dir1/
По умолчанию, в случае разрыва соединения частично переданные файлы будут удалены. Чтобы изменить это поведение необходимо указать ключ --partial. Так же можно использовать --partial-dir=DIR чтобы в место назначения попадали только полностью переданные файлы. Очень полезно при использовании плохих каналах связи.