How to Transfer Files from One Linux Server to Another Using rsync?

's avatar
Bobby Iliev ・July 15, 2020
2 minute read ・Updated July 17, 2020
How to Transfer Files from One Linux Server to Another Using rsync?

Introduction

The rsync command is probably one of the most used commands out there. It is used to securely copy files from one server to another over SSH.

Compared to the scp command, which does a similar thing, rsync makes the transfer a lot faster, and in case of an interruption, you could restore/resume the transfer process.

In this tutorial, I will show you how to use the rsync command and copy files from one server to another and also share a few useful tips!

Prerequisites

Before you get started, you would need to have 2 Linux servers. I will be using DigitalOcean for the demo and deploy 2 Ubuntu servers.

You can use my referral link to get a free $100 credit that you could use to deploy your virtual machines and test the guide yourself on a few DigitalOcean servers:

DigitalOcean $100 Free Credit

Transfer Files from local server to remote

This is one of the most common causes. Essentially this is how you would copy the files from the server that you are currently on (the source server) to remote/destination server.

What you need to do is SSH to the server that is holding your files, cd to the directory that you would like to transfer over:

cd /var/www/html

And then run:

Checkout our latest product - the ultimate tailwindcss page creator 🚀
rsync -avz user@your-remote-server.com:/home/user/dir/

The above command would copy all of the files and directories from the current folder on your server to your remote server.

Rundown of the command:

  • -a: is used to specify that you want recursion and want to preserve the file permissions and etc.
  • -v: is verbose mode, it increases the amount of information you are given during the transfer.
  • -z: this option, rsync compresses the file data as it is sent to the destination machine, which reduces the amount of data being transmitted -- something that is useful over a slow connection.

I recommend having a look at the following website which explains the commands and the arguments very nicely:

https://explainshell.com/explain?cmd=rsync+-avz

In case that the SSH service on the remote server is not running on the standard 22 port, you could use rsync with a special SSH port:

rsync -avz -e 'ssh -p 1234' user@your-remote-server.com:/home/user/dir/

Transfer Files remote server to local

In some cases you might want to transfer files from your remote server to your local server, in this case, you would need to use the following syntax:

rsync -avz your-user@your-remote-server.com:/home/user/dir/ /home/user/local-dir/

Again, in case that you have a non-standard SSH port, you can use the following command:

rsync -avz -e 'ssh -p 2510' your-user@your-remote-server.com:/home/user/dir/ /home/user/local-dir/

Transfer only missing files

If you would like to transfer only the missing files you could use the --ignore-existing flag.

This is very useful for final sync in order to ensure that there are no missing files after a website or a server migration.

Basically the commands would be the same apart from the appended --ignore-existing flag:

 rsync -avz --ignore-existing  user@your-remote-server.com:/home/user/dir/

Conclusion

Using rsync is a great way to quickly transfer some files from one machine over to another in a secure way over SSH.

For more cool Linux networking tools, I would recommend checking out this tutorial here:

Top 15 Linux Networking tools that you should know!

Hope that this helps!

Bobby

Still have a question?

Get help or discuss anything development/design related.

Start a discussion