Respostas:
Você pode tentar o seguinte procedimento: em vez de scp, use dd para pular a parte baixada e anexar 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 uma lição de casa.
dd
com tamanhos de bloco pequenos pode ser lento (apenas 350 kB / s aqui). Felizmente, as scp
transferências parecem ocorrer em blocos de 1024 bytes. Se assim for para o arquivo (ou mais, truncando-lo para o 1024 byte bloco mais próximo), você pode acelerá-lo como este: ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
. (Note-se que $sofar
, em seguida, tem que ser o número de blocos de 1024 bytes para pular!)
rsys
na segunda linha é apenas um exemplo de nome de host e não um argumento especial ssh
. Eu sugiro que você substitua por user@host
para evitar confusão.
Com scp
, não.
Se ambas as extremidades tiverem, você pode usar rsync -LvzP remoteserver:path/to/file localfile
para transferir um único arquivo.
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. Yarek e Grawity forneceram soluções válidas que eu +1 para ambos, mas, para retomar de um ponto de interrupção, eu gosto de 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). Lembre-se de que os dois parâmetros finais devem ser considerados no arquivo de origem e no arquivo de destino nessa ordem. A sintaxe do nome do arquivo varia de acordo com o local ou o arquivo de destino ser local ou remoto. Se eu estivesse enviando (carregando) arquivos [texto], reescreveria os exemplos fornecidos como:
# Do local para o remoto sofar = `ssh remote_system ls -l interrupted_file | awk '{print $ 5}' '; dd se = arquivo_de_arquivo bs = 1 pular = $ sofar | ssh remote_system "cat >> ./interrupted_file"
E para a solução rsync, eu adiciono -e ssh
. Você deve considerar se precisa ou não de verbosidade, compactação, preservar propriedade, permissões, carimbo de data e hora, diretórios de recuperação, etc. Verifique as páginas de manual 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
scp -o ConnectTimeout 60
Permite especificar o tempo limite para uma conexão. Pode impedir a sua conexão.
Sim, se ambas as extremidades oferecerem suporte ao sftp - after scp remoteuser@remotehost:/absolute/filename .
falhar, você poderá continuar fazendo sftp remoteuser@remotehost
e depois reget /absolute/filename
continuar o download.