Eu uso o comando scp shell para copiar uma pasta enorme de arquivos.
Mas em algum ponto do tempo eu tive que matar o comando em execução (por Ctrl + C ou kill).
No meu entendimento, o scp copiava os arquivos sequencialmente, portanto, deveria haver apenas um arquivo parcialmente copiado.
Como o mesmo comando scp pode ser retomado para não sobrescrever os arquivos copiados com sucesso e para tratar corretamente os arquivos parcialmente copiados?
PS Eu sei que posso fazer esse tipo de coisa no rsync, mas scp é mais rápido para mim por algum motivo e eu o uso.
dd
com umaskip
variável adequada e canalizar parassh
:)Respostas:
Você deve usar
rsync
maisssh
A opção principal é
-P
, que é a mesma que--partial --progress
Outras opções, como
-a
(para o modo de arquivo) e-z
(para ativar a compactação), também podem ser usadas.O manual: https://download.samba.org/pub/rsync/rsync.html
fonte
-r
. Fonte: lucasb.eyer.be/snips/rsync-skipping-directory.htmlrsync -P -rsh remoteuser@remotehost:/remote/path /local/path
Uma alternativa ao rsync:
Use
sftp
com a opção-r
(recursivamente copiar diretórios inteiros) e opção-a
desftp
'sget
comando para continuar transferências parciais de arquivos existentes.Pré-requisito: Sua
sftp
implementação já tem uma opçãoget
com-a
.Exemplo:
Copie o diretório
/foo/bar
do servidor remoto para o diretório atual local. O diretóriobar
será criado no diretório atual local.fonte
echo "put -a foo/bar" | sftp -r server:/foo
Desde o OpenSSH 6.3, você pode usar o
reget
comando emsftp
.Ele tem a mesma sintaxe de
get
, exceto que inicia uma transferência a partir do final de um arquivo local existente.fonte
Outra possibilidade é tentar salvar o scp que você já iniciou quando ele travar.
ctrl + z para segundo plano e pare, então ssh para o servidor receptor e faça o login, então saia. Agora fg o processo scp e observe-o retomar de 'estagnado'!
fonte
Quando o rsync também para após alguns segundos, quando inicialmente estava funcionando bem, acabei com a seguinte solução de força bruta:
fonte
Você pode usar as opções
-rsh
e-P
dersync
.-P
é para download parcial e-rsh
indica que a transferência é sobre o ssh procotol.O comando completo seria:
rsync -P -rsh remoteuser@remotehost:/remote/path /local/path
fonte
Tive o mesmo problema ontem, ao transferir um enorme dump sql via scp, tive sorte com
wget --continue the_url
Essa postagem do blog explica muito bem http://www.cyberciti.biz/tips/wget-resume-broken-download.html
fonte