How to Use rsync Command in Linux with Examples

The rsync command is one of the most powerful and versatile tools for file synchronization and transfer in Linux. It is widely used by system administrators, developers, and regular users to efficiently back up and synchronize files across directories, disks, and even remote systems. In this comprehensive guide, we’ll explore the key features of rsync, how to use it, and practical examples to help you leverage its full potential.

Installation of rsync

Before you can start using rsync, you need to ensure it is installed on your system. Most Linux distributions come with rsync pre-installed, but if it is not available, you can easily install it.

Checking if rsync is Already Installed

To check if rsync is already installed on your system, open your terminal and type:

rsync --version

If rsync is installed, you will see version information. If not, you will need to install it.

Installing rsync on Various Linux Distributions

Depending on your Linux distribution, the installation process varies slightly.


sudo apt-get update sudo apt-get install rsync


sudo dnf install rsync

Basic Syntax of rsync Command

Understanding the basic syntax of the rsync command is crucial for using it effectively. The general structure of an rsync command is as follows:

rsync [options] source destination

Common Options Explained

-aPreserves the structure and attributes of files, including permissions, timestamps, symbolic links, and more. Essentially, it enables recursive copying and retains file properties.
-vProvides detailed output of the rsync process, showing which files are being transferred.
-zCompresses file data during transfer to reduce bandwidth usage.
–deleteDeletes files in the destination directory that do not exist in the source directory, ensuring that the destination is an exact mirror of the source.

Examples of Using rsync Command

To fully grasp the capabilities of rsync, it’s beneficial to see it in action through practical examples. Below, we explore various scenarios demonstrating the versatility and power of rsync for different use cases.

Syncing Files from a Source Directory to a Destination Directory

One of the simplest uses of rsync is synchronizing files from one directory to another. This can be done with the following command:

rsync -av /source/directory/ /destination/directory/
  • a: Archive mode, which preserves permissions, timestamps, and other attributes.
  • v: Verbose mode, which provides detailed output of the transfer process.

This command ensures that all files and subdirectories in /source/directory/ are copied to /destination/directory/, preserving their properties.

Synchronizing Directories Recursively

To recursively synchronize directories, ensuring that all files and subdirectories are included, use the following command:

rsync -a /source/directory/ /destination/directory/

The -a option enables recursive copying, preserving the directory structure and attributes of all files and subdirectories.

Transferring Files Over SSH

For secure file transfers over a network, rsync can be combined with SSH:

rsync -av -e ssh /source/directory/ user@remote:/destination/directory/
  • e ssh: Specifies SSH as the remote shell, ensuring secure data transfer.

This command transfers the contents of /source/directory/ to /destination/directory/ on the remote server remote, authenticating as user.

Excluding Specific Files or Directories

Sometimes, you may want to exclude certain files or directories from the synchronization process. This can be done using the --exclude option:

rsync -av --exclude 'file_or_directory_to_exclude' /source/directory/ /destination/directory/

For example, to exclude all .tmp files:

rsync -av --exclude '*.tmp' /source/directory/ /destination/directory/

This command synchronizes all files except those matching the *.tmp pattern.

Deleting Files in the Destination

To ensure the destination directory is an exact mirror of the source, including deleting files that no longer exist in the source, use the --delete option:

rsync -av --delete /source/directory/ /destination/directory/

This command removes any files in the destination directory that are not present in the source directory, maintaining an exact copy.

Using rsync with Cron for Automated Backups

Setting Up a Cron Job

Automating backups with rsync ensures regular and reliable data protection. To schedule regular backups, you can use cron, a time-based job scheduler in Unix-like operating systems.

Create an rsync Backup Script

First, write a shell script that contains your rsync command:

rsync -av --delete /source/directory/ /destination/directory/

Save the script as and make it executable:

chmod +x /path/to/

Schedule the Script with cron

Edit your crontab file to schedule the script:

crontab -e

Add a line to run the script at your desired interval. For example, to run the backup script daily at midnight:

0 0 * * * /path/to/

This setup ensures that rsync runs automatically at specified intervals, providing consistent and up-to-date backups without manual intervention.

Synchronizing Large Data Sets Efficiently

When dealing with large data sets, optimizing transfer efficiency is crucial. The --partial and --progress options can help manage large transfers more effectively:

Resuming Interrupted Transfers with -partial

The --partial option keeps partially transferred files if the transfer is interrupted. This allows rsync to resume the transfer from where it left off, saving time and bandwidth.

rsync -av --partial /source/directory/ /destination/directory/<br>

Monitoring Transfer Progress with -progress

The --progress option displays progress information during the transfer. This is particularly useful for monitoring the status of large transfers.

rsync -av --progress /source/directory/ /destination/directory/

Combining these options ensures efficient and transparent synchronization of large data sets, minimizing disruptions and maximizing transfer speed.

Verifying Synchronization with Checksums

To ensure the integrity of synchronized files, rsync offers the -c option, which compares files based on their checksums rather than just size and modification time. This thorough comparison guarantees that files are identical on both the source and destination:

rsync -avc /source/directory/ /destination/directory/

Using checksums provides an additional layer of verification, ensuring that data is transferred accurately and completely.

Limiting Bandwidth Usage with -bwlimit

The --bwlimit option limits the bandwidth used by rsync, preventing it from consuming all available network bandwidth. This option is useful in environments where bandwidth needs to be shared with other applications.

rsync -av --bwlimit=1000 /source/directory/ /destination/directory/

Transferring Files Within a Specified Size Range

The --min-size and --max-size options allow you to transfer only files within a specified size range, optimizing transfers based on file size.

rsync -av --min-size=100k --max-size=10M /source/directory/ /destination/directory/

Adjusting Compression Level

The --compress-level option adjusts the compression level used during transfer. Higher compression reduces data size at the cost of increased CPU usage.

rsync -avz --compress-level=9 /source/directory/ /destination/directory/

By using these advanced options, you can further fine-tune rsync to meet your specific needs, whether it’s managing bandwidth, selecting files based on size, or optimizing compression.


The rsync command is a powerful tool for file synchronization and backup in Linux. By understanding its basic syntax, options, and practical applications, you can effectively manage and safeguard your data. Whether you’re synchronizing directories locally or remotely, rsync offers the flexibility and efficiency needed for a wide range of tasks. Start incorporating rsync into your workflow today to experience its benefits firsthand.

Share your love

Newsletter Updates

Stay updated with our latest guides and tutorials about Linux.

Leave a Reply

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