rsync – fast, versatile file copying and synchronization

rsync command
rsync command

rsync efficiently copies and synchronizes files locally or remotely. It only transfers changed portions, making it ideal for backups and large transfers.

Synopsis

rsync [OPTIONS] SOURCE DEST
rsync [OPTIONS] SOURCE [USER@]HOST:DEST
rsync [OPTIONS] [USER@]HOST:SOURCE DEST

Common Options

OptionDescription
-aArchive mode (preserves permissions, times, etc.)
-vVerbose
-zCompress during transfer
-PShow progress + keep partial files
--progressShow transfer progress
-nDry run (show what would happen)
--deleteDelete files in dest not in source
-e sshUse SSH (default on modern systems)
--excludeExclude files matching pattern

Examples

Local sync

$ rsync -av /source/ /destination/

Sync to remote server

$ rsync -avz /local/folder/ user@server:/remote/folder/

Sync from remote server

$ rsync -avz user@server:/remote/folder/ /local/folder/

With progress

$ rsync -avP /source/ /destination/

Dry run first

$ rsync -avn /source/ /destination/

Mirror (delete extra files in dest)

$ rsync -av --delete /source/ /destination/

Exclude files

$ rsync -av --exclude='*.log' --exclude='.git' /source/ /dest/

Custom SSH port

$ rsync -avz -e "ssh -p 2222" /source/ user@server:/dest/

Trailing Slash Matters!

# WITH trailing slash: copies CONTENTS of folder
$ rsync -av /source/ /dest/
# Result: /dest/file1, /dest/file2

# WITHOUT trailing slash: copies folder itself
$ rsync -av /source /dest/
# Result: /dest/source/file1, /dest/source/file2

Common Patterns

Backup with timestamp

$ rsync -av --backup --suffix=".$(date +%Y%m%d)" /source/ /backup/

Resume interrupted transfer

$ rsync -avP --partial /source/ /dest/

Bandwidth limit

$ rsync -av --bwlimit=1000 /source/ /dest/    # 1000 KB/s

Exclude from file

$ rsync -av --exclude-from=exclude.txt /source/ /dest/

Tips

  • Always use -a: Archive mode preserves everything important
  • Test with -n first: Dry run before destructive operations
  • Trailing slash matters: /source/ vs /source behave differently
  • Use –delete carefully: Can remove files you wanted to keep
  • For cloud storage: Consider rclone instead

See Also

  • scp — Simple secure copy
  • cp — Local copy
  • tar — Archive files

Tutorials