Learn Rsync command with examples

Rsync command used to copy and sync files, directories locally or remotely. Learn rsync with different examples and options.

Rsync command! Data backup with copy and sync!

Rsync i.e. Remote Sync is the command used for copying and synchronizing files or directories locally or remotely on Linux Unix based systems. In this article we will learn how to use rsync command. different switches of it and examples.

As you know Rsync not only copies but also synchronizes files and directories, it is best for mirroring data between two machines and data backups. Rsync is an efficient way than any other copy command since it takes bandwidth and time only for the first time of data copy. In consecutive sync cycles, it only transfers data which is changed. This requires less bandwidth and time, but you still have updated data at the destination! Hence it is best for remote data mirrors and backups.

Lets see Rsync command with different uses and their examples.

Rsync command should be available on your system in plain vanilla installation. If not, install the ‘rsync’ package. Basically without any switch you can run the command with just source and destination path. The path can be local or remote.

# rsync testfile /tmp/

This is a very basic simple example of rsync command. It won’t show any output and copy/sync data from source file ‘testfile‘ to destination file under /tmp directory.

Rsync command with verbose mode

-v switch can be used for verbose mode. Information like byte sent, bytes received, transfer speed, the total size of the source is displayed on the console when command run.

# rsync -v testfile /tmp/directory9/
created directory /tmp/directory9
testfile

sent 79 bytes  received 31 bytes  220.00 bytes/sec
total size is 7  speedup is 0.06

If you watch closely, Rsync will create a destination directory if it does not exist!

Rsync command to copy directories

-r (recursive copy) the switch helps in copying directories recursively to destination.

# rsync -rv testdir /tmp/
sending incremental file list
testdir/
testdir/test2
testdir/test4
testdir/test1/
testdir/test3/

sent 194 bytes  received 62 bytes  512.00 bytes/sec
total size is 0  speedup is 0.00

In the above example we used verbose mode as well. Directory testdir has two files named test2, test4. It also has directories named test1, test3. All these 4 entities copy over to destination as you see their listing in output.

Preserve permissions and ownership while rsync copy

-a (archive mode) the switch used to instruct rsync to preserve file directory permissions and ownership at the destination.

# ll test1
-rw-r--r--. 1 root root 0 Jul 23 22:40 test1

# rsync -av test1 /tmp
sending incremental file list
test1

sent 69 bytes  received 31 bytes  200.00 bytes/sec
total size is 0  speedup is 0.00

# ll /tmp/test1
-rw-r--r--. 1 root root 0 Jul 23 22:40 /tmp/test1

You can observe source and destination permissions and ownership is preserved after using -a switch with rsync.

Rsync with compression

One of the important factors while copying data is bandwidth. Bandwidth utilization can be reduced with compressed data. Compressed data transfer is more speedy, takes less time and bandwidth. Rsync allows us to compress data during transfer using -z switch.

# rsync -azv test1 /tmp
sending incremental file list
test1

sent 66 bytes  received 31 bytes  194.00 bytes/sec
total size is 0  speedup is 0.00

If you observe we synced the same file test1 from previous example output (obviously after removing /tmp/test1). Without compression it sent 69 bytes and now with compression 66 bytes! I know, 3 bytes is no big difference but these are empty test files. Compression makes a big difference with a bunch of huge files.

Rsync to copy from local to remote

For copying file/directory from local to remote, specify the destination as remote in notation username@hostname_or_IP:/path/

# rsync -azv test1 root@10.10.1.23:/tmp/
root@10.10.1.23's password:
sending incremental file list
test1

sent 66 bytes  received 31 bytes  21323.00 bytes/sec
total size is 0  speedup is 0.00

Rsync to copy from remote to local

It will work like the above example only you have to reverse source and destination.

# rsync -azv root@10.10.1.23:/tmp/ test1 
root@10.10.1.23's password:
sending incremental file list
test1

sent 66 bytes  received 31 bytes  21123.00 bytes/sec
total size is 0  speedup is 0.00

I am transferring empty file here hence you see total size as zero.

Limiting bandwidth use in Rsync

Another important aspect of network file copy is to limit the bandwidth of transfer so that it won’t take whole available bandwidth, choke network, and degrade the network performance for other services/devices using it. Rsync has the ability to limit bandwidth with --bwlimit switch. The switch should be supplied to specify a maximum transfer rate in kilobytes per second.

# rsync -razv --bwlimit=100 httpd-2.4.25 /tmp/
sending incremental file list
httpd-2.4.25/srclib/apr/build/
httpd-2.4.25/srclib/apr/build/ltmain.sh
-----output clipped------

sent 1214030 bytes  received 10136 bytes  97933.28 bytes/sec
total size is 83112573  speedup is 67.89

You can see speed limited to 97kbps (97933 bytes/sec) as per our specification 100kbps in command switch --bwlimit.

Show progress while transferring in Rsync

If you have a list of file directories with big size then its good to see the progress of each transfer so that you are assured that transfer is in progress and not hung.  Specify --progress switch so that transfer details shown for each file transfer in output.

# rsync -razv --progress httpd-2.4.25 /tmp/
sending incremental file list
httpd-2.4.25/
httpd-2.4.25/.deps
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1312/1314)
httpd-2.4.25/.gdbinit
       10566 100%    0.00kB/s    0:00:00 (xfer#2, to-check=1311/1314)
httpd-2.4.25/ABOUT_APACHE
       13496 100%    2.57MB/s    0:00:00 (xfer#3, to-check=1310/1314)
httpd-2.4.25/Apache-apr2.dsw
       65980 100%   10.49MB/s    0:00:00 (xfer#4, to-check=1309/1314)

----- output clipped -----

In the above output you can see after each file copied, transfer speed details, the duration is flashed on the screen.

Apart from above all switches, there is the whole list of switch which can be used with Rsync command. All of them can be found under the Rsync man page on your terminal. I am listing a few important one below for your quick reference.

  • -h: Output numbers will be shown in a human-readable format
  • --include: Include files. Wild cards can be used
  • --exclude: Exclude from the copy. Wild cards can be used
  • -q: Quiet mode. Suppress non-error messages
  • --backup: Make a backup
  • -l: Copy links as well
  • -H: Preserve hard links
  • -t: Preserve modification times
  • --dry-run: Perform dry run. No changes actually made.
  • --delete-after: Delete files after transfer

Let us know if you want additions of examples of any specific switch in the below comments. I will add them accordingly.

One thought on “Learn Rsync command with examples

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.