rsync'ing несколько пар {src, dest}

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

Локально мой процесс сборки выводит каталог out содержащий подкаталоги bin , lib и etc Я подталкиваю подмножество выходных файлов в соответствующие позиции на удаленном сервере.

Мои команды scp выглядят так:

 scp out/bin/$BINFILES remote:/usr/bin scp out/lib/$LIBFILES remote:/usr/lib scp out/etc/$ETCFILES remote:/etc 

Это делает три подключения к удаленному серверу и полностью копирует файлы, даже если они не были изменены. Это то, что я сделал с rsync :

 rsync -e ssh -avz out/bin/$BINFILES remote:/usr/bin rsync -e ssh -avz out/lib/$LIBFILES remote:/usr/lib rsync -e ssh -avz out/etc/$ETCFILES remote:/etc 

который быстрее (сжатие и исключение дубликатов), но все же делает три подключения к удаленному серверу.

Есть ли способ достичь этих трех копий с помощью одной команды rsync ? Я открыт, например, для того, чтобы поместить все пары {src, dest} во временный файл перед копированием, если это будет работать.

Я также готов попробовать другой инструмент, но он должен быть доступен для OS X (моя текущая платформа разработки), и он должен предпочтительно поддерживать оптимизацию передачи, такую ​​как rsync .

  • SSH на два адреса, используйте тот, который подключается первым
  • Quotes exercise - как сделать ssh внутри ssh во время запуска sql внутри второго ssh?
  • Как указать на папку ssh с закрытыми ключами, чтобы автоматически выбрать один?
  • Как поместить значение команд netcat echo pipe в переменную
  • При использовании шпатлевки alt-left / right отличается, когда byobu запускается автоматически из профиля
  • Как проверить, успешно ли у пользователя root ssh'd на моем сервере?
  • BindAddress в конфигурации ssh на ноутбуке
  • Динамическая переадресация портов с помощью socat
  • One Solution collect form web for “rsync'ing несколько пар {src, dest}”

    Причина, по которой несколько последовательных команд rsync медленны, заключается в том, что установление соединения SSH занимает немного времени. Вы можете решить эту проблему, используя установленный SSH-канал . Настройте общий доступ к совместному подключению , затем откройте главное соединение, используйте свои команды rsync без изменений (обратите внимание, что -e ssh был стандартным с десятилетия или около того) и, наконец, закрыть соединение SSH:

     ssh -Nf remote rsync -avz out/bin/$BINFILES remote:/usr/bin rsync -avz out/lib/$LIBFILES remote:/usr/lib rsync -avz out/etc/$ETCFILES remote:/etc ssh -O exit remote 

    Если вы не можете использовать совместное использование SSH (например, поскольку одна из сторон работает Dropbear или очень старая версия OpenSSH), вы можете установить туннель , но это более громоздко.

    В качестве альтернативы, с небольшой работой, вы можете реорганизовать свою команду rsync в одну, играя с фильтрами rsync и символическими ссылками. Если вы можете перемещать каталоги bin и lib , это довольно просто:

     mkdir out/usr mv out/bin out/lib out/usr/ rsync -avz \ --include='/bin/***' --include='/lib/***' --include='/etc/***' \ --exclude='*' out/ remote:/ 

    Если вы не можете их перемещать, но нет никаких абсолютных символических ссылок на деревьях, которые вы копируете, вы можете использовать абсолютную символическую ссылку и сказать rsync, чтобы рассматривать ее как каталог:

     ln -s "$PWD" out/usr rsync -avz --copy-unsafe-links \ --include='/bin/***' --include='/lib/***' --include='/etc/***' \ --exclude='*' out/ remote:/ 
    Interesting Posts

    Где «dpkg -l» * «" собирает свою информацию?

    Будет ли графический интерфейс брандмауэра в CentOS перезаписывать изменения, внесенные с помощью руководства IPTABLES?

    Обновление файлов конфигурации в скрипте, который ссылается на них?

    Разница между медленными системными вызовами и быстрыми системными вызовами

    apt-show-versions показывает неправильную информацию для индивидуального пакета deb

    Чтение файла с циклом IFS работает только тогда, когда не используются массивы

    Команда «ip addr» показывает «UP», даже нет адреса, связанного с этим интерфейсом

    Добавить путь, если в subdir

    Подключите модем Huawei E3131B 3g

    Linux DST путаница

    Заменить «-из» на «это» в начале строки

    Базовые пакеты FreeBSD

    Как подсчитать, сколько файлов принадлежит каждой комбинации пользователей / групп?

    Символическая ссылка и вопросы с жесткой ссылкой

    Как определить, работает ли в браузере плеер HTML5?

    Linux и Unix - лучшая ОС в мире.