Примеры работы с данными на локальной машине
Простое копирование файлов
В принципе, команда ср отлично выполняет свою функцию, за исключением небольшой прихоти -- при копировании больших файлов хотелось бы знать сколько времени осталось до завершения операции (т.е. всего-навсего нужно вывести прогресс операции копирования). Данную задачу можно решить несколькими способами: 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/
Работа с удаленной машиной
Скопировать полностью структуру фалов и папок из /home/data1/ в /home/other/data2/:
rsync -av /home/data1/ /home/other/data2/
Наличие завершающих слешей в /home/data1/ файла обязательно, иначе результат копирования будет содержать корневую папку data1/ в папке /home/other/data2/. Выполнить копирование на удалённую систему по ssh:
rsync -rvz /home/data1/ user@server.com:/home/data1/
Задать альтернативный порт ssh:
rsync -rvz -e 'ssh -p 10022' /home/data1/ user@server.com:/home/data1/
Исключить некоторые файлы:
rsync -rvz /home/data1/ --exclude="tmp/*" --exclude="*~" user@server.com:/home/data1/
Не учитывать пользователя, группу и права при передачи:
rsync -rvz --no-p --no-o --no-g /home/data1/ user@server.com:/home/data1/
Описание опций
$-a, --archive – архивный режим, включает рекурсивное копирование и сохранение прав и владельца (ключи rlptgoD) $-t, --times – обновлять время модификации файла на приёмной стороне. При отсутствии этой опции или -a становиться неэффективной оптимизация передачи по времени изменения файлов $-c, --checksum – использование сверки по контрольным суммам, а не по времени изменения и размеру $--size-only – проверка только по размеру файлов $-r – рекурсивный режим (копирование всех подпапок и файлов в них) $-v – подробные вывод операций $-z – компрессия данных при передачи $-p – сохранять права $--del – удалить файлы в папке назначения которых нет в источнике (точная копия) $-R – использовать относительные пути при создании символических ссылок $--numeric-ids – не транслировать имена владельца и группы в цифровые UID и GID, оставить на удалённой стороне номера как есть $--size-only – использование для сверки только размер файлов $--bwlimit=KBPS – ограничение пропускной способности, чтобы не забивать канал (Kbit/s) $--ignore-errors – продолжать копирование и удаление после появления ошибок $-h – вывод результатов с человеко-читаемом формате $-A, --acls – сохранение списков ACL $-H, --hard-links – сохранение жестких ссылок $-S, --sparse – оптимизировать разреженные файлы $-x, --one-file-system – не выходить за пределы текущей точки монтирования $--exclude=