The rsync
command is a utility that is used to synchronize files and directories between two locations. It is a powerful tool that is commonly used for backups, data synchronization, and transferring files between servers. rsync
is particularly useful because it only transfers the differences between files, rather than transferring the entire file. This makes it much faster than other file transfer utilities such as cp
or scp
.
Here are some examples of how to use the rsync
command:
To copy a local file to a remote server:
rsync file.txt username@remote:/path/to/destination
To copy a directory and its contents from a local machine to a remote server:
rsync -avz /path/to/local/directory username@remote:/path/to/destination
To copy a file from a remote server to a local machine:
rsync username@remote:/path/to/source /path/to/local/destination
To copy a directory and its contents from a remote server to a local machine:
rsync -avz username@remote:/path/to/source /path/to/local/destination
Note that the -a
flag stands for “archive” and preserves the file attributes and permissions, while -v
stands for “verbose” and provides more detailed output during the transfer, and -z
stands for “compress” and compresses the data during the transfer to speed up the transfer.
Now, let’s compare rsync
with the scp
command, which is another utility used for transferring files between servers. scp
stands for “secure copy” and uses the Secure Shell (SSH) protocol to transfer files. Like rsync
, scp
can be used to transfer files between local and remote machines. Here is an example of using scp
to copy a file from a local machine to a remote server:
scp file.txt username@remote:/path/to/destination
And here is an example of using scp
to copy a file from a remote server to a local machine:
scp username@remote:/path/to/source /path/to/local/destination
There are several scenarios where you might want to use rsync
rather than scp
:
- When transferring large files or directories:
rsync
is generally faster thanscp
because it only transfers the differences between files, rather than transferring the entire file. - When preserving file attributes and permissions:
rsync
has the option to preserve file attributes and permissions with the-a
flag, whilescp
does not have this option. - When transferring multiple files:
rsync
allows you to specify multiple files or directories to transfer, whilescp
only allows you to transfer one file or directory at a time. - When needing more control over the transfer process:
rsync
has a wide range of options and features that allow you to customize the transfer process, such as the ability to exclude certain files or directories, specify a transfer rate, and compress the data during the transfer.scp
has fewer options and is generally more basic in its functionality.
rsync command options
Here is a list of some of the main arguments for the rsync
command with a brief description:
-a
: archive mode, which preserves file attributes and permissions-v
: verbose mode, which provides more detailed output during the transfer-z
: compress mode, which compresses the data during the transfer to speed up the transfer-r
: recursive mode, which copies directories recursively-t
: preserve times, which preserves the modification times of the source files-h
: human-readable, which displays file sizes in a human-readable format-n
: dry run, which performs a trial run without actually transferring any files--delete
: delete files that are not present in the source location--exclude=PATTERN
: exclude files that match the specified pattern--include=PATTERN
: include files that match the specified pattern--max-size=SIZE
: only transfer files that are smaller than the specified size--bwlimit=RATE
: limit the transfer rate to the specified rate
Note that this is not an exhaustive list of all the arguments for rsync
, and there are many other options and features available. You can find more information on the rsync
command and its arguments by running the man rsync
command or by consulting the documentation on the rsync
website.
how to synchronise a remote directory with rsync
To synchronize a remote directory using rsync
, you can use the following command:
rsync -avz username@remote:/path/to/source /path/to/local/destination
This command will transfer the files and directories from the specified remote source directory to the local destination directory, and will preserve file attributes and permissions with the -a
flag, provide verbose output with the -v
flag, and compress the data during the transfer with the -z
flag.
Note that this command will overwrite any existing files in the local destination directory with the same name as the files in the remote source directory. If you want to preserve the existing files in the local destination directory and only transfer new or modified files, you can use the --update
flag.
For example:
rsync -avzu username@remote:/path/to/source /path/to/local/destination
This will only transfer new or modified files, and will skip files that are already present in the local destination directory and have the same modification times.
You can also specify multiple source directories to sync, or use the --delete
flag to delete files in the local destination directory that are not present in the remote source directory. For example:
rsync -avz --delete username@remote:/path/to/source1 /path/to/local/destination username@remote:/path/to/source2 /path/to/local/destination
This will sync both source1
and source2
from the remote server to the local destination directory, and will delete any files in the local destination directory that are not present in either of the remote source directories.
You can also use the --exclude
and --include
flags to exclude or include specific files or directories from the sync. For example:
rsync -avz --exclude='*.tmp' --include='*.txt' username@remote:/path/to/source /path/to/local/destination
This will sync all files and directories from the remote source directory to the local destination directory, but will exclude any files with the .tmp
extension and will only include files with the .txt
extension.
Summary
In summary, both rsync
and scp
are useful utilities for transferring files between servers, but rsync
is generally more powerful and efficient due to its ability to only transfer the differences between files and its numerous options and features.