rsync Guide 15 min read by syncopio Team

The Complete rsync Guide: 30 Commands Every Admin Should Know

Master rsync with 30 essential commands organized by use case. From basic copies to advanced mirroring, bandwidth throttling, and troubleshooting.

rsync is the Swiss Army knife of file transfer. Whether you’re backing up a laptop, mirroring servers, or running a multi-terabyte migration, rsync has a flag for it. This guide covers 30 essential commands organized by use case — from day-one basics to production-grade workflows.

What is rsync?

rsync (remote sync) is a file copying utility first released in 1996 by Andrew Tridgell and Paul Mackerras. It’s famous for its delta-transfer algorithm, which sends only the differences between source and destination files, dramatically reducing network traffic on subsequent syncs.

Key characteristics:

  • Incremental transfers — only changed bytes are sent
  • Preserves metadata — timestamps, permissions, ownership, symlinks
  • Compression — optional on-the-wire compression
  • Available everywhere — pre-installed on virtually every Linux/Unix system

Basic Syntax

rsync [OPTIONS] SOURCE DESTINATION
  • Local copy: rsync -av /src/ /dest/
  • Push to remote: rsync -av /src/ user@host:/dest/
  • Pull from remote: rsync -av user@host:/src/ /dest/

Trailing slash matters

rsync -av /src/ /dest/ copies the contents of /src into /dest.

rsync -av /src /dest/ copies the directory itself, creating /dest/src/.

This trailing-slash difference is the #1 source of rsync mistakes.


Section 1: Basic Copy & Sync (Commands 1–8)

1. Archive mode copy

rsync -av /source/ /destination/

The -a (archive) flag preserves permissions, timestamps, symlinks, and ownership. -v adds verbose output. This is your everyday workhorse.

2. Dry run — preview before copying

rsync -avn /source/ /destination/

Add -n (or --dry-run) to see what would happen without actually transferring anything. Always dry-run first on large or destructive operations.

3. Copy with progress display

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

Shows per-file progress — useful for large files. For overall progress on many files, use --info=progress2 (rsync 3.1+).

4. Overall transfer progress

rsync -av --info=progress2 /source/ /destination/

Shows a single progress line with total bytes transferred, percentage, and speed — much cleaner than per-file progress for bulk transfers.

5. Copy to/from a remote server via SSH

rsync -avz -e ssh /local/data/ user@server:/remote/data/

The -e ssh flag (default in modern rsync) uses SSH for the transport. Add -z for compression — useful over WAN links.

6. Copy with a custom SSH port

rsync -av -e "ssh -p 2222" /local/ user@server:/remote/

Wrapping the SSH command lets you specify non-standard ports, identity files, or any SSH option.

7. Recursive copy of specific file types

rsync -av --include='*.log' --exclude='*' /source/ /destination/

Copies only .log files. The --include/--exclude order matters — rsync evaluates rules top-to-bottom.

8. Exclude specific directories

rsync -av --exclude='.git' --exclude='node_modules' /project/ /backup/

Skip directories you don’t need in backups. Use --exclude-from=file.txt for complex exclusion lists.


Section 2: Mirroring & Deletion (Commands 9–14)

9. Mirror source to destination (with delete)

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

Destructive operation

—delete removes files from the destination that don’t exist on the source. Combined with a wrong trailing slash, this can wipe out data. Always dry-run first.

10. Delete files before transfer

rsync -av --delete-before /source/ /destination/

Frees up space on the destination before copying new files. Useful when the destination is nearly full.

11. Delete files after transfer

rsync -av --delete-after /source/ /destination/

Safer than --delete-before — new files arrive before old ones are removed. Default behavior of --delete.

12. Move files (delete from source after transfer)

rsync -av --remove-source-files /source/ /destination/

Transfers files then deletes them from the source. Note: only deletes files, not empty directories.

13. Update only — skip newer files on destination

rsync -av --update /source/ /destination/

Skip files that are newer on the destination. Useful when multiple sources contribute to one destination.

14. Mirror with checksum verification

rsync -avc --delete /source/ /destination/

The -c flag uses checksums instead of timestamp+size to determine which files need updating. Slower but catches corruption.


Section 3: Performance & Bandwidth (Commands 15–20)

15. Limit bandwidth

rsync -av --bwlimit=50000 /source/ user@server:/destination/

Limits transfer to ~50 MB/s (value in KiB/s). Essential for migrations that share bandwidth with production traffic.

16. Enable compression

rsync -avz /source/ user@server:/destination/

The -z flag compresses data in transit. Beneficial for text-heavy transfers over slow links. Skip it on fast LANs — compression adds CPU overhead.

17. Parallel rsync with find

find /source/ -maxdepth 1 -type d | xargs -P 4 -I {} rsync -av {} /destination/

Runs 4 parallel rsync processes, one per top-level directory. Crude but effective for saturating fast networks.

18. Transfer with I/O priority

ionice -c2 -n7 rsync -av /source/ /destination/

Runs rsync at the lowest I/O priority to avoid impacting production workloads.

19. Resume interrupted transfer

rsync -av --partial --progress /source/ /destination/

The --partial flag keeps partially transferred files so rsync can resume where it left off. Add --partial-dir=.rsync-partial to keep partials in a hidden directory.

20. Whole-file mode (skip delta algorithm)

rsync -avW /source/ /destination/

The -W flag sends whole files instead of computing deltas. Faster for initial copies on fast networks where delta computation is wasted CPU.


Section 4: Advanced Workflows (Commands 21–26)

rsync -av --delete --link-dest=/backups/latest /source/ /backups/2026-02-25/
ln -snf /backups/2026-02-25 /backups/latest

Creates space-efficient incremental backups using hard links. Unchanged files share disk space with the previous backup.

22. Preserve ACLs and extended attributes

rsync -avAX /source/ /destination/

-A preserves ACLs, -X preserves extended attributes. Required for complete metadata preservation on Linux filesystems.

23. Log to a file

rsync -av --log-file=/var/log/rsync-migration.log /source/ /destination/

Creates a detailed log of every file transferred, skipped, or deleted. Essential for audit trails.

24. Transfer files matching a pattern from a list

rsync -av --files-from=filelist.txt /source/ /destination/

Copies only the files listed in filelist.txt (one path per line, relative to source). Useful for selective migrations.

25. Compare directories without copying

rsync -avn --delete /source/ /destination/ | grep "deleting\|>f"

Uses dry-run mode to show which files differ between source and destination. A quick diff tool.

26. Sync over rsync daemon (no SSH)

rsync -av rsync://server/module/ /destination/

Connects to an rsync daemon (rsyncd) instead of SSH. Useful for anonymous or high-performance transfers on trusted networks.


Section 5: Safety & Troubleshooting (Commands 27–30)

27. Maximum file size filter

rsync -av --max-size=100M /source/ /destination/

Skips files larger than 100MB. Useful for separating large files that need special handling.

28. Set timeout for stalled transfers

rsync -av --timeout=300 /source/ user@server:/destination/

Kills the transfer if no data is received for 300 seconds. Prevents hung rsync processes.

29. Checksum-only verification (no transfer)

rsync -avn --checksum /source/ /destination/

Compares checksums without transferring anything — a pure verification pass.

30. Verbose stats summary

rsync -av --stats /source/ /destination/

Prints a summary at the end showing total files, bytes transferred, speedup ratio, and more.


Troubleshooting Common Issues

ProblemLikely CauseFix
”Permission denied” on destinationUser lacks write accessCheck ownership and chmod; use --no-perms if permissions don’t matter
Transfer is extremely slowMany small files, high latencyUse --whole-file, increase MaxStartups in sshd_config
”rsync error: some files vanished”Files deleted during scanUsually harmless; use --ignore-missing-args
Files re-transferred every timeTimestamp precision mismatch (NFS)Use --modify-window=1 or --checksum
”Argument list too long”Too many files in one directoryUse --files-from or `find
Symlinks not preservedMissing -l flagUse -a (includes -l) or -l explicitly

Performance Tips

  1. Use --whole-file for initial copies — delta computation is wasted on files that don’t exist yet
  2. Disable compression on LANs — CPU overhead outweighs savings on 1Gbps+ networks
  3. Parallelize by directory — use xargs -P or GNU parallel for multiple streams
  4. Tune SSH ciphers — ssh -c aes128-gcm@openssh.com is faster than the default
  5. Increase I/O buffers — --sockopts=SO_SNDBUF=4194304 on high-latency links

When rsync Isn’t Enough

rsync is brilliant for what it does, but it has real limitations for enterprise migrations:

  • No web dashboard — you’re reading terminal output or parsing log files
  • No distributed workers — one process, one machine, one bottleneck
  • No built-in verification — you must run a second pass with --checksum
  • No job management — no pause, resume, schedule, or audit trail
  • No multi-protocol — rsync speaks rsync. If you need NFS + SMB + S3 in one migration, you need separate tools

syncopio does all of this with a web UI

syncopio wraps the power of rsync-style transfers in a web dashboard with distributed workers, built-in verification, multi-protocol support (NFS, SMB, S3), and real-time monitoring. See all features or compare syncopio vs rsync in detail.

syncopio dashboard showing a multi-terabyte migration with real-time progress, ETA, and file-level detail 1200x800
syncopio dashboard showing a multi-terabyte migration with real-time progress, ETA, and file-level detail

Further Reading

Ready to simplify your migrations?

See how syncopio can save you hours on every migration project.

Request a Demo