{{tag>shell utils network scp rsync ssh}}

====== Примеры работы с данными на локальной машине ======


===== Простое копирование файлов =====

В принципе, команда ср отлично выполняет свою функцию, за исключением небольшой прихоти -- при копировании больших файлов хотелось бы знать сколько времени осталось до завершения операции (т.е. всего-навсего нужно вывести прогресс операции копирования).
Данную задачу можно решить несколькими способами:
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=

