scp resume after got disconnected or timeout

I often use the UNIX command line tool scp (secure copy) to copy a file to a remote server. However, scp has one major drawback: It doesn’t support resuming a transfer. So whenever I’m transferring a file and something comes up which interrupts my transfer–which is bound to happen–I’m cursing away at scp. The solution? Use rsync. It is overkill for most things I do, but when a transfer is interrupted, it is handy. Now, on to the doing.

I want to transfer the file “myFile” to the server “remoteMachine”, which I do with scp:

scp myFile remoteMachine:dirToPutIn/

(You should know this already if you’re reading this in the first place.)

(Muzak while the transfer is in progress; a loud wail and the sound of hair being torn out by its roots as the transfer comes to a grinding halt.)

Time to resume the file with rsync, which I do thusly:

rsync --partial --progress myFile remoteMachine:dirToPutIn/

The “–partial” argument is what does the trick. I added “–progress” because I like to see how the transfer is going; rsync understandably doesn’t show this by default as it is mostly used for purposes which don’t require live progress reporting (e.g. scheduled backups).

Because I know I’ll have this problem again at some point, I have created an alias in my shell’s (zsh) configuration file (~/.zshrc):

alias scpresume="rsync --partial --progress"

I know that rsync and scp are not necessarily related, but the name “scpresume” reflects the purpose of the task I wish to do. And getting it done is what matters the most after all.

Update:
Jan pointed out in a comment that rsync communication is not secure by default, and that you should use tunneling to achieve secure communication. Andi provides the solution which is quite simple: Use --rsh=ssh (use ssh as the remote shell). Thus, our alias from before would look like this:

alias scpresume="rsync --partial --progress --rsh=ssh"
  • 33 Users Found This Useful
Was this answer helpful?

Related Articles

Setup & disable unused services on CentOS

Step 1: Now we will remove all software groups, to get Centos to a minimum Step 1.1: Run...

[Virtuamin] install php-mcrypt + php-domxml

Để install php-mcrypt + php-domxml cho webmin các bạn dùng: yum -y install php-mcrypt...

Chỉnh local time cho VPS

mv /etc/localtime /etc/localtime.oldln -sf /usr/share/zoneinfo/Asia/Ho_Chi_Minh...

How to Compress and Uncompress Files with SSH

Login to SSH: 1) To compress files: Examples: tar cvf abc.tar a1.ps a2.tex adir/* # compress...

Install Centmin on CentOS

Centmin is a bash script developed for use on CentOS 5 & 6.It is designed to provide a fully...