Use esta sintaxe "ponto":
scp -prq server1:dir1/. server2:dir2/
Isso copia o conteúdo desse diretório, em vez do próprio diretório. E eu acredito que é mais portátil que *
globbing.
Estou usando o scp para copiar um diretório de um servidor remoto para um novo diretório (ou seja, apenas alterando o nome) em outro servidor remoto como:
scp -prq server1:dir1 server2:dir2
Isso funciona bem se o dir2 não existir no servidor2, ele cria um novo diretório chamado dir2 que contém tudo de dir1 no servidor1.
O problema vem quando o dir2 já existe no servidor2 (NOTA: eu não tenho como saber disso antecipadamente ou fazer uma remoção em dir2 no servidor2 de antemão) - o que acontece é que eu recebo uma cópia do dir1, chamada dir1, em dir2.
Tenho certeza de que há algo básico que estou perdendo, mas simplesmente não consigo resolver isso.
Qualquer ajuda muito apreciada!
Atenciosamente,
Giles
Ok, eu tenho menos de 10 repetições e não posso ter ar $ ed para esperar 8 horas, então aqui está o que eu recebi:
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 tenho certeza de como fazer isso em um único comando ou mesmo se possível.
Cheers @mindthemonkey, às vezes, apenas obter um novo ponto de vista pode ajudar a indicar o caminho.
Use esta sintaxe "ponto":
scp -prq server1:dir1/. server2:dir2/
Isso copia o conteúdo desse diretório, em vez do próprio diretório. E eu acredito que é mais portátil que *
globbing.
Normalmente, para controlar a criação de diretórios, você precisa usar um /
à direita para indicar um caminho completo, mas acho que isso não criará o diretório se ele não existir:
scp -prq server1:dir1/* server2:dir2/
Isso também pode faltar escondido. arquivos devido à expansão * glob (sem algum trabalho específico de shell complicado )
Você pode abordá-lo de maneira diferente com ssh
e tar
.
ssh server1 "cd dir1 && tar -cf - ." | ssh server2 "( mkdir -p dir2; cd dir2 && tar -xf - )"
Mas isso significa que o tráfego passa pela sua máquina local.