These docs describe unreleased changes on master. Read the latest stable documentation.
Rsync compatibility
See syq rsync for the option list.
syq rsync accepts common rsync commands for local copies, pushes, and pulls.
It uses its own protocol: the remote program must be syq, not rsync.
Run syq rsync --help-all for all accepted flags.
syq rsync -av project/ server:backup/project/
Differences to check before switching
| Area | Syq behavior |
|---|---|
| Filters | Gitignore syntax via --syq-ignore / --syq-ignore-from; rsync filters are unsupported |
| Deletion timing | Extras are deleted after copying; no delete-before or delete-during mode |
Positive --max-delete N | Deletes nothing if the plan exceeds N; rsync deletes up to N |
| Destination collisions | Distinct sources claiming the same destination fail before copying |
--ignore-existing | Keeps an existing non-directory even where the source would create a directory |
| Type changes | Refuses replacement between a directory and any non-directory, even when the directory is empty |
--update | Checks mtimes only for regular files; replacements between non-directory types still occur |
| Resume | Always keeps syq partial files; cannot reuse rsync partials |
| Delta transfer | Reuses matching blocks at the same offsets; does not find shifted blocks |
--rsync-path PATH | Exact syq executable path, not a shell fragment |
| Remote-to-remote | Refused; use native syq cp |
Scan and copy errors prevent deletion. A destination that contains its source
on the same host cannot be pruned. Preview deletion scope with --dry-run -v;
see deletion rules.
The compatibility command uses rsync’s default size-and-whole-second timestamp
quick check. Native syq cp also compares fractional seconds at the precision
suggested by the destination timestamp; see timestamp matching.
Use -c to compare contents when size and timestamp match; source timestamps
are preserved, so ordinary clock skew does not require the source timestamp
to be newer.
Syq uses numeric IDs and always keeps partial files, so --numeric-ids and
--partial are accepted no-ops. -P enables progress. Compression is on by
default; -z does not enable anything extra. -B / --block-size changes
syq’s comparison and reuse block size; see the tuning table
for its default and allowed range. Values outside that range are rejected.
Unsupported features
| Feature | Options or syntax |
|---|---|
| Rsync filter rules | --exclude, --include, --filter |
| Hard links, ACLs, xattrs, sparse files | -H, -A, -X, -S |
| Backup and alternate destination trees | --backup, --backup-dir, --suffix, --link-dest, --compare-dest, --copy-dest |
| Following descendant links | -L, --copy-links, --copy-unsafe-links, -k, --copy-dirlinks, -K, --keep-dirlinks |
| Link filtering or rewriting | --safe-links, --munge-links |
| Other placement and filesystem controls | -R / --relative, --partial-dir, -x / --one-file-system |
| Early deletion | --delete-before, --delete-during, --force |
| Other comparison and output controls | --size-only, -I / --ignore-times, --modify-window, --chmod, --log-file, -i / --itemize-changes |
| Daemon connections | rsync://, host::module |
Unsupported common flags are rejected with an explanation. Selected symlink
targets are copied unchanged. --insecure-links does not enable any of the
unsupported descendant-link options.
File-list parsing and help
--files-from cannot combine with syq ignore rules or deletion. A listed
source whose parent is a symlink fails that entry with exit 23, without
creating its implied destination parent. --insecure-links only relaxes the
ownership check on symlinks in typed local paths; it does not allow symlink
traversal beneath a selected source, including entries from --files-from.
Other parsing differences:
..components are rejected rather than clamped at the source root.dir/anddirselect the same entry. Neither selects contents unless-ris explicitly supplied;-aalone does not enable recursion here..and/are rejected as root entries.- Use
--from0for NUL separators;-0is unsupported.
Blank entries and comment-looking names starting with # or ; are ignored
in both separator modes. Use ./#name for a literal name. The paths are relative to one source directory; destination parents are
created as needed.
-h alone does not show help; use --help or --help-all.
Syq extensions
Most syq-specific options carry a --syq- prefix. Common ones are
--syq-ignore, --syq-ignore-from, and
--syq-verify-only. The last compares selected contents without writing;
it does not produce rsync’s itemized-change format.
The hashing controls are
--integrity-checking and --syq-expected-hash
in rsync mode. -c still selects content comparison.
Filters are last-match-wins with ! re-inclusion, unlike rsync’s first-match
rules. Check the gitignore examples when
converting a filtered command.
The compatibility tests record comparison evidence and version-specific details.
Compare without copying
syq rsync -a --syq-verify-only project/ backup/
Hashes selected contents on both sides, writes nothing, and reports DIFFERS
or MISSING. Differences or inspection failures produce a nonzero exit status.
Performance controls use --performance-tuning; resource ceilings use
--resource-limits. The standard rsync spelling --bwlimit remains available
in syq rsync, as does --checksum for BLAKE3 content comparison.