Назад | Перейти на главную страницу

Сделать scp всегда перезаписывать или создавать каталог

Я использую scp для копирования каталога с одного удаленного сервера в новый каталог (IE просто меняет имя) на другом удаленном сервере, например:

scp -prq server1:dir1 server2:dir2

Это отлично работает, если dir2 не существует на server2, он создает новый каталог с именем dir2, который содержит все, начиная с dir1 на server1.

Проблема возникает, когда dir2 уже существует на server2 (ПРИМЕЧАНИЕ: у меня нет возможности знать об этом заранее или заранее удалить dir2 на server2) - происходит то, что я получаю копию dir1, называемую dir1, в dir2.

Я уверен, что мне не хватает чего-то базового, но я просто не могу с этим справиться.

Любая помощь очень ценится!

С Уважением,

Джайлз

Хорошо, у меня меньше 10 повторений, и я не могу ждать 8 часов, поэтому вот что у меня:

Вот сценарий, который мне подходит:

#!/bin/sh
echo "method 1"
scp -prq server1:dir1/* server2:dir2/ >/dev/null  2>&1

if [ "$?" -ne "0" ]; then
        echo "failed ... trying method 2"
        scp -prq server1:dir1 server2:dir2
fi

exit

Все еще не уверен, как это сделать с помощью одной команды или даже если это возможно.

Ура, @mindthemonkey, иногда просто свежая точка зрения может помочь указать путь.

Используйте этот синтаксис с точкой:

scp -prq server1:dir1/. server2:dir2/

Это копирует содержимое этого каталога, а не самого каталога. И я считаю, что он более портативный, чем * глобус.

Обычно для управления созданием каталогов вам нужно использовать завершающий / чтобы обозначить полный путь, но я думаю, что тогда не удастся создать каталог, если он не существует:

scp -prq server1:dir1/* server2:dir2/

Это также может пропустить скрытое. файлы из-за расширения * glob (без некоторых сложная работа, специфичная для оболочки)

Вы можете подойти к этому иначе с ssh и tar.

ssh server1 "cd dir1 && tar -cf - ." | ssh server2 "( mkdir -p dir2; cd dir2 && tar -xf - )"

Но это означает, что трафик идет через ваш локальный компьютер.

сначала очистите его с помощью ssh, а затем воссоздайте с помощью scp. то есть в файле сценария ...

ssh -i ~ / .ssh / [private_key] user @ server2 "rm -rf dir2; exit;"

scp -prq server1: dir1 server2: dir2