Existe uma maneira de retomar um scp interrompido de um arquivo?

9

Ocasionalmente, estou baixando um arquivo muito grande via scp e há uma pequena chance de cada conexão cair e cortar a transferência no meio do caminho.

Existe uma maneira de retomar isso?

    
por GJ. 07.05.2012 / 20:44

5 respostas

8

Você pode tentar o seguinte: ao invés de scp use dd para pular a parte baixada e acrescentar o restante ao arquivo.

sofar='ls -l ./destfile | awk '{print $5}''
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile

Possível otimização: trabalhe com grandes blocos. Vamos deixar isso como lição de casa.

    
por 07.05.2012 / 21:11
6

Com scp , não.

Se as duas extremidades o tiverem, você poderá usar rsync -LvzP remoteserver:path/to/file localfile para transferir um único arquivo.

    
por 07.05.2012 / 20:50
3

Sim, existem maneiras de retomar a partir do ponto de interrupção, mas não é possível usar o scp. sftp reget filename faz o que você precisa. O Yarek e o Grawity forneceram soluções válidas que eu adicionei a ambos, mas para retomar a partir de um ponto de interrupção, eu gosto do rsync. Os comandos de exemplo fornecidos assumem que você está recuperando um arquivo de um servidor remoto para sua estação de trabalho local (download). Por favor, tenha em mente que os dois últimos parâmetros devem ser considerados source_file e target_file nessa ordem. A sintaxe do nome do arquivo varia dependendo se o arquivo de origem ou de destino é local ou remoto. Se eu estivesse enviando (carregando) arquivos [text], eu iria reescrever os exemplos fornecidos como:

#From local to remote
sofar='ssh remote_system ls -l interrupted_file | awk '{print $5}'';
dd if=source_file bs=1 skip=$sofar | ssh remote_system "cat >> ./interrupted_file"

E para a solução rsync, adiciono -e ssh . Você deve considerar se precisa ou não de verbosidade, compactação, preservação de propriedade, permissões, registro de data e hora, diretórios de recursão, etc. Verifique as man pages e o google, em relação ao parâmetro -L. Você pode querer que os links simbólicos permaneçam como links em vez de referenciá-los.

rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file

    
por 11.10.2013 / 20:35
1

Há outra solução (além das soluções rsync ou dd declaradas aqui) que estou surpreso que ninguém tenha mencionado: é o comando reput de sftp .

    
por 13.08.2016 / 10:53
0
scp -o ConnectTimeout 60

Permite que você especifique o tempo limite para uma conexão. Pode evitar que sua conexão seja interrompida.

    
por 07.05.2012 / 21:08