Удобное копирование файлов между серверами

Недавно передо мной встала задача по перекидыванию кучи файлов с одного сервера на другой. scp оказалась не очень удобной для этого, так как возникли проблемы с симлинками и расставлением прав, поэтому пришлось обратиться к команде rsync. Правда тут же возникла другая проблема – к части файлов не было доступа, поэтому они не скопировались, но так как на экран выводилась вся доступная информация о происходящем, то разделить глазами, что куда выводится возможности не было. Перенаправление вывода в файл спасало, но при этом терялась информация о процессе. И тут на помощь пришёл tee и конечная команда стала выглядеть так

rsync -ave ssh : > >(tee /tmp/rsync_log) 2> >(tee /tmp/rsync_err_log >&2)

Смысл в следующем:

  • rsync – собственно команда копирования
  • -a – команда архивирования. Включает в себя
    • r = рекурсивное копирование (по директориям)
    • l = копирование симлинков, как симлинков
    • p = сохранение прав
    • t = сохранение времени создания файлов
    • g = сохранение групп, которой принадлежит файл
    • o = сохранение владельца файла
    • D = сохранение файлов устройств и специальных файлов
  • v = verbose режим, то есть выводится дополнительная информация.
  • e = выполнить соответствующую команду на удалённой машине.
  • >(tee …) = скопировать stdout в файл и копию отправить на экран
  • 2> = добавить к выводу на stdout результат выполнения следующей команды
  • >(tee … >&2) = скопировать вывод stderr в файл и так же отдать его на экран.

В общем и целом, получилось достаточно удобно. Наверняка более глубокое изучение rsync и прочих команд могло бы позволить делать какие-то более эффективные вещи, но для пяти минут гугления эта команда дала более чем приемлимый результат.

Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *