Xgu.ru теперь в Контакте  — приходите и подключайтесь.
Пока мы работаем над следующими видео, вы можете подключиться в Контакте. Познакомимся и обсудим новые страницы и ролики.

Vk-big.pngYoutube-big.jpeg

rsync

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Автор: Владимир Кореньков

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 чтобы в место назначения попадали только полностью переданные файлы. Очень полезно при использовании плохих каналах связи.

[править] Дополнительная информация

Источник — «http://xgu.ru/wiki/rsync»