Estou usando o scp para copiar um diretório de um servidor remoto para um novo diretório (IE apenas alterando o nome) em outro servidor remoto, como:
scp -prq server1:dir1 server2:dir2
Isso funciona bem se dir2 não existe no servidor2, ele cria um novo diretório chamado dir2 que contém tudo, desde dir1 no servidor1.
O problema ocorre quando o dir2 já existe no servidor2 (NOTA: não tenho como saber isso com antecedência ou remover previamente o dir2 no servidor2) - o que acontece é que obtenho uma cópia do dir1, chamada dir1, no dir2.
Estou certo de que falta algo básico, mas simplesmente não consigo resolver.
Qualquer ajuda muito apreciada!
Saudações,
Giles
Ok, tenho menos de 10 representantes e não posso esperar 8 horas, então aqui está o que eu tenho:
Aqui está um script que funciona para mim:
#!/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
Ainda não sei como fazer isso em um único comando ou mesmo se possível.
Felicidades @mindthemonkey, às vezes apenas obter um novo ponto de vista pode ajudar a indicar o caminho.
cd dir2
.Respostas:
Use esta sintaxe "ponto":
Isso copia o conteúdo desse diretório, em vez do próprio diretório. E eu acredito que é mais portátil do que
*
globbing.fonte
scp: error: unexpected filename: .
Normalmente, para controlar a criação do diretório, você precisa usar um trailing
/
para implicar um caminho completo, mas acho que isso falhará ao criar o diretório se ele não existir:Isso também pode estar escondido. arquivos devido à expansão * glob (sem algum trabalho específico complicado da shell )
Você pode abordá-lo de maneira diferente com
ssh
etar
.Mas isso significa que o tráfego passa pela sua máquina local.
fonte