Как скопировать файлы с удаленного ПК, если есть только SSH?
Автор H@wk!
11:03:2009 г.
RSYNC Синхронизация файлов на удаленных хостах.
Аналогично rcp позволяет копировать файлы между хостами, но ускоряет процесс т.к. передает только измененные части (хитрый алгоритм на основе сравнения контрольных сумм). Позволяет копировать ссылки (links), специальные устройства (device), владельца и группу файла, права доступа. Позволяет использовать в качестве транспорта как rsh, так и ssh. Включает сервер rsyncd (доступ анонимный или с аутентификацией), порт 873/TCP. Я сервер не использую (не люблю, когда пароли лежат в открытом виде) и потому не описываю. Имя файла записывается в виде: [[user@]host:]file. Если файл назначения является именем директории, то исходные файлы копируются в нее. Если имя исходной директории завершается обычной косой чертой, то копируется содержимое директории, а не сама директория (почувствуйте разницу ;). Относительные имена отсчитываются относительно домашней директории соответствующего пользователя на соответствующем хосте. Если в качестве параметров указано только имя удаленного файла/директории, то выдается листинг. Нельзя копировать с одного удаленного хоста на другой. rsync должен быть установлен на обоих концах. Опции:
опции диалога:
-v (увеличить болтливость: один раз - имена передаваемых файлов; два раза - имена пропускаемых файлов; три раза - отладочная печать)
-q (совсем тихо)
--version
--progress (только в сочетании с -v)
--stats (статистика эффективности алгоритма)
--help
-n (не делать реальной пересылки, только отчет о предполагаемых действиях)
какие файлы включать в список проверки перед пересылкой
-r (рекурсивное копирование)
-x (не пересекать границы файловой системы при рекурсии)
--exclude=шаблон
--cvs-exclude (стандартный набор исключений, используемый cvs: *~, *.bak, *.o, core и т.д., включая содержимое файлов .cvsignore)
--exclude-from=имя-файла
--include=шаблон
--include-from=имя-файла
правила проверки на совпадение файлов
-I (пересылать файл даже если длина и время модификации совпадает на обоих концах)
--size-only (определять необходимость пересылки только по совпадению размеров файла)
--modify-window=секунд (если разница времени модификации меньше указанного числа, то файлы считаются одинаковыми; по умолчанию - 0)
-c (на исходном конце считается контрольная сумма (MD4) файла, на приемном конце она сравниваются с контрольной суммой локальной копии; если суммы совпадают, то пересылка не происходит)
-u (не изменять, если приемный файл новее исходного)
--existing (изменять только существующие файлы)
-W (копировать файлы целиком, не задействуя алгоритм сравнения)
backup (сохранять старую версию изменяемого файла)
-b (делать backup, суффикс по умолчанию - '~')
--suffix=суффикс (суффикс для backup)
--backup-dir (backup в указанную директорию)
обработка ссылок
-l (сохранять символьные ссылки; пропускаются по умолчанию)
--copy-links (обрабатывать символьные ссылки как обычные файлы)
--safe-links (игнорировать ссылки, указывающие вовне приемного дерева, и абсолютные ссылки)
-H (воссоздавать жесткие ссылки на приемном конце; срабатывает только если оба (а больше?) файла входят в список пересылки)
сохранение атрибутов файла
-a (архивный режим: синоним -rlpogDt)
-p (сохранять права доступа)
-o (сохранять владельца файла; только для root)
--numeric-ids (вместо имени владельца и группы пересылается uid и gid)
-g (сохранять группу файла; получатель должен быть членом группы)
-D (сохранять устройство; только для root)
-t (сохранять время модификации; очень рекомендуется, если предполагается повторная пересылка)
правила удаления
--delete (удалять на приемной стороне файлы, не существующие на исходной стороне)
--delete-excluded (удалять, если "несуществование" вызвано действием шаблона исключения)
--delete-after (удалять после передачи, а не до)
--ignore-errors (удалять даже при ошибках ввода/вывода)
--max-delete=число (не удалять более указанного числа файлов)
--force (удалять непустые директории; действует также при замене директории обычным файлом с тем же именем)
-R (относительные имена: в действительности передает имя файла из командной строки целиком вместе с именем директории, а не только файловую часть имени; осторожнее с символьными ссылками!)
-S (эффективно обрабатывать файлы с дырками)
--block-size=размер (размер блока для сравнения контрольных сумм - 700)
-e ssh (транспортный уровень; можно через переменную окружения RSYNC_RSH)
--rsync-path=путь (путь к rsync на удаленном хосте)
--partial (сохранять частично переданные файлы)
--timeout=секунд (по умолчанию 0 - бесконечность)
--temp-dir=директория (где хранить файлы во время пересылки)
--compare-dest=директория
--compress (gzip, но используется информация о пересылаемых структурах, что при большом числе неизмененных файлов будет полезно)
Синтаксис шаблона (и не лениво людям придумывать свои правила описания шаблонов?):
если шаблон начинается с обычной косой черты, то он сопоставляется с началом имени файла, иначе с концом имени файла
если шаблон завершается косой чертой, то он сопоставляется только с директорий
метасимволы *, ? и [ действуют как в шаблонах shell
если в шаблоне имеются две ** подряд, то все метасимволы могут сопоставляться с косой чертой, иначе их действие останавливается косыми чертами
если шаблон содершит нефинальную косую черту, то он сопоставляется полному имени файла, иначе последнему компоненту; только учтите, что алгоритм работает рекурсивно