Традиционным способом копирования файлов по SSH является команда scp
.
scp *.js user@remote-host.com:~/folder/
Все файлы с расширением js из текущей папки будут скопированы на сервер remote-host.com в папку folder в домашней директории пользователя user.
Можно так же копировать папку вместе со всеми файлам и вложенными папками:
scp -r src user@remote-host.com:~/folder/
А теперь нетрадиционный способ:
tar -c src | ssh user@remote-host.com "cd ~/folder/ && tar -x"
Папка src архивируется утилитой tar
. Затем этот архив передается на сервер по SSH, где выполняется команда cd
с указанными параметрами и распаковывается полученный архив.
Пример чуть сложнее:
npm run build && \
DEPLOY_TARGET=$(date +%Y%m%d-%H%M%S) && \
tar -c build | \
ssh -t mista_k@slim.local \
`cd /var/www && \
mkdir -p $DEPLOY_TARGET && \
tar -x -C $DEPLOY_TARGET --strip-components 1 -v && \
ln -sfn $DEPLOY_TARGET build`
Коментарии к заметке
А почему ещё и не гзиповать архив для уменьшения трафика? Или затраты на архвивацию будут больше выигрыша во времени?
Можно и гзиповать. Не думаю, что скорость архивирования будет меньше, чем скорость передачи по сети.
Вообще, у SSH есть встроенная компрессия тем же самым алгоритмом, что и в gzip. Её можно включить как для всех соединений в
~/.ssh/config
, так и для одного конкретного ключом-C
.Хех. Хороший вариант. Только многабукаф. Его в sh скрипт можно засунуть и поставить алиасом на scp.
scp -C для сжатия на лету