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.

TL;DR

rsync is powerful but complex — 30+ flags, single-threaded, no dashboard, no built-in verification. Great for simple copies, but enterprise migrations need more. syncopio replaces rsync scripting with parallel transfers, inline checksum verification, and a real-time web UI — no flags to memorize.

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 transfer dashboard showing real-time progress, worker activity, and per-dataset status
syncopio transfer dashboard with real-time progress, ETA, and per-dataset activity

Further Reading

Ready to simplify your migrations?

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

Request a Demo