rsync (Remote Sync) is a most commonly used command for copying an synchronizing files and directories to local or remote on linux or mac.
If the source directory has a trailing slash, the command will copy only the directory contents to the destination directory.
When the trailing slash is omitted, rsync
copies the source directory inside the destination directory.
rsync <options> <src> <dest>
How to install rsync command?
To install rsync on linux or ubuntu:
# Install Rsync on Ubuntu and Debian sudo apt install rsync # Install Rsync on CentOS and Fedora sudo yum install rsync # install rsync on mac using brew brew install rsync # install rsync on mac using port sudo port install rsync
How to copy a file from one to other location on local machine?
To copy file from one to other location on local maching using rsync use following commands:
# copy laravel.log file from /var/log directory to /tmp directory # If the destination directory doesn’t exist, rsync will create it. rsync -a /var/log/laravel.log /tmp/
How to copy a file from local to remote location?
rsync must be installed on both the source and the destination machine in order for sync to work. Let's look at following example that copies file from local machine to remote machine:
# copy laravel.log file from /var/log directory to /tmp directory on remote server rsync -a /var/log/laravel/ user@remote_host_or_ip:/tmp/ # copy laravel.log file from /var/log directory to /tmp directory on remote server # specify port if it is different than 22 rsync -a -e "ssh -p 2322" /var/log/laravel/ user@remote_host_or_ip:/tmp/
rsync ignore files or directories when syncing
Sometimes you may not want certain files to be copied or synced. In that case you can use following flag to exclude certain files or directories.
# copy contents of src/ dir to dest/ directory exclude node_modules dir and tmp directory rsync -a --exclude=node_modules --exclude=tmp /src/ /dest/ # create a file called /exclude-file.txt and add name of the directories you want to exclude node_modules tmp dist # use following command to specify file that ignores different directories rsync -a --exclude-from='/exclude-file.txt' /src/ /dest/
More Examples
Command | Description |
---|---|
rsync -zvh db.tar.gz /tmp/backups/ | sync a single file on a local machine from one location to another location |
rsync -avzh /root/bkp /tmp/backups/ | sync all the files from one directory to a different directory |
rsync -avzh /root/bkp root@IP:/tmp/ | sync a directory from a local machine to a remote machine |
rsync -avzh root@IP:/tmp /tmp/ | sync a remote directory to a local directory |
rsync -avzhe ssh root@IP:/tmp/*.log /tmp | Copy a file from a Remote Server to a Local Server with SSH |
rsync -avzhe ssh /tmp/*.log root@IP:/tmp/ | Copy a file from a Local Server to a Remote Server with SSH |
rsync -avz --delete root@IP:/tmp/ /tmp/ | If a file or directory does not exist at the source, but already exists at the destination, you might want to delete that existing file/directory at the target while syncing. |
Options Summary
Option | Summary |
---|---|
-v, --verbose | increase verbosity |
-q, --quiet | suppress non-error messages |
-c, --checksum | skip based on checksum, not mod-time & size |
-a, --archive | archive mode |
-r, --recursive | recurse into directories |
-R, --relative | use relative path names |
-b, --backup | make backups |
-u, --update | skip files that are newer on the receiver |
-d, --dirs | transfer directories without recursing |
-l, --links | copy symlinks as symlinks |
-L, --copy-links | transform symlink into referent file/dir |
-H, --hard-links | preserve hard links |
-p, --perms | preserve permissions |
-E, --executability | preserve executability |
-A, --acls | preserve ACLs (implies -p) |
-t, --times | preserve modification times |
-z, --compress | compress file data during the transfer |
--exclude=PATTERN | exclude files matching PATTERN |
--exclude-from=FILE | read exclude patterns from FILE |
-h, --help | show help |