Updated on 03 Oct 2020
Here are some additional resources to help us with using rsync.
Copy file / directory from local to local
In your home directory, the following command will copy the
Downloads/mama.txt file to your test/ directory.
rsync -avz Downloads/mama.txt test/
- a archive mode (perserves file permissions, timestamps etc)
- v verbose (provide extra console output)
- z compress mode, compress the file(s) and decompress at the location.
Copy file / directory from local to server
Similar to the example above, except that this time I am specifying the server (and location) for the file. The location is simply the home directory on the remote server, but it can be any location you have access to.
rsync -avz mama.txt username@remote_server:/home/username/
In this particular example I am being asked for a password. If I had created a SSH key and shared that with the other machine, then I would not be prompted for the password.
Exclude files / directories
I can copy entire directories, and with that chose to exclude certain file types or directories using the
--exclude flag. If you have multiple items to exclude, just repeat the
--exclude option for each one.
rsync -avz /home/username/ username@remote_server:/home/username/ --exclude deploy --exclude *.gz --exclude tests
Delete destination files
There is an option to remove files on the destination machine that don’t exist on the source using the
--delete flag. This is a scenario where you might want to sync two machines.
rsync -avz forCopy/ usernanme@remote_server:/home/username/forCopy/ --delete
Delete source files
It could be that once a file is copied to a remote machine, you no longer need it on the source machine. In that case,
--remove-source-files option will work for you.
rsync -avz forCopy/mama.txt username@remote_server:/home/username/forCopy/ --remove-source-files
If you’re not sure of how the rsync will work, you can use
--dry-run to test your configuration.
rsync -avz forCopy/ username@remote_server:/home/username/forCopy/ --delete --dry-run
This will give you the exact output you’d be expecting without actually performing the task. Once you’re confident that you’ve got your command correct, you can remove the
--dry-run and rsync will run for real.