Я использую scp для копирования каталога с одного удаленного сервера в новый каталог (IE просто меняет имя) на другом удаленном сервере, например:
scp -prq server1:dir1 server2:dir2
Это прекрасно работает, если dir2 не существует на server2, он создает новый каталог с именем dir2, который содержит все, начиная с dir1 на server1.
Проблема возникает, когда dir2 уже существует на сервере server2 (ПРИМЕЧАНИЕ. У меня нет возможности узнать об этом заранее или выполнить удаление на dir2 на server2 заранее) - в результате я получаю копию dir1, называемую dir1, в dir2.
Я уверен, что есть кое-что основное, что я пропускаю, но я просто не могу решить это.
Любая помощь высоко ценится!
С Уважением,
Giles
Хорошо, у меня менее 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, иногда просто получить новую точку зрения может помочь указать путь.
cd dir2
.Ответы:
Используйте этот «точечный» синтаксис:
Это копирует содержимое этого каталога, а не сам каталог. И я полагаю, что это более портативно, чем
*
глобализация.источник
scp: error: unexpected filename: .
Обычно для управления созданием каталога вам нужно использовать завершающий символ,
/
чтобы подразумевать полный путь, но я думаю, что тогда не удастся создать каталог, если он не существует:Это также может пропустить скрытое. файлы из-за расширения * glob (без какой-либо хитрой работы с оболочкой )
Вы можете подойти к нему по-другому с
ssh
иtar
.Но это означает, что трафик идет через вашу локальную машину.
источник