Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

These docs describe unreleased changes on master. Read the latest stable documentation.

syq rsync

Copy with rsync-style arguments:

syq rsync -av project/ server:backup/project/

Check Rsync compatibility before replacing a script. Trailing slashes follow rsync’s rules. Here -h means human-readable sizes; use --help for help. SYQ_RSYNC_OPTIONS supplies extra arguments.

syq rsync [OPTIONS] SRC... DEST
syq rsync [OPTIONS] [USER@]HOST:SRC... DEST
syq rsync [OPTIONS] SRC... [USER@]HOST:DEST

Copy policy and filtering

Argument / optionMeaning
-a, --archiveArchive mode; same as -rlptgoD
-r, --recursiveRecurse into directories
-l, --linksCopy symlinks as symlinks
--insecure-linksFollow symlinks in this machine’s rsync operator paths regardless of ownership (local only, as in rsync)
-p, --permsPreserve permissions
-t, --timesPreserve modification times
-g, --groupPreserve group
-o, --ownerPreserve owner (root only)
-DPreserve device and special files
-h, --human-readableNo-op accepted for rsync compatibility (sizes are always human-readable)
--numeric-idsNo-op accepted for rsync compatibility (syq always uses numeric uid/gid)
--bwlimit <RATE>Limit the aggregate file-data rate across all workers (default unit: KiB/s; 0 disables)
-PSame as –progress –partial
--partialNo-op accepted for rsync compatibility (syq always keeps partial files)
-c, --checksumSkip quick check; compare file contents block by block and repair differences
--syq-verify-onlySyq extension: only compare source and destination contents; transfer nothing
--inplaceUpdate files in place instead of writing a partial and renaming. Use this to modify a large existing file without copying it first (saves time and disk space when only part of it changes). Cannot be combined with -u or –ignore-existing: an interrupted in-place write leaves a newer-looking final file those filters would then skip forever
--syq-ignore <PATTERN>Syq extension: skip paths matching PATTERN (gitignore syntax: foo matches at any depth, /foo only at the source root, foo/ only directories, !pat re-includes). Repeatable; together with –syq-ignore-from the patterns act like the lines of one .gitignore file, in command-line order, anchored at each source root. Skipping a directory skips its whole subtree, so to copy only .jpg use: –syq-ignore ‘’ –syq-ignore ‘!/’ –syq-ignore ‘!.jpg’
--syq-ignore-from <FILE>Syq extension: securely open and read ignore patterns from raw-byte FILE (one per line, # comments); repeatable
--deleteDelete extraneous files from the destination directories (paths the source does not have). Deletion happens after the transfer and is skipped entirely if the source scan reported any error. Ignored paths (–syq-ignore) are protected on both sides. rsync’s –delete-after and –delete-delay mean the same thing and are accepted. Cannot be combined with –syq-verify-only or –files-from
--delete-excludedWith –delete, also remove destination paths that the –syq-ignore patterns exclude
--max-delete <N>With –delete, refuse all deletions if more than N are planned (exit 25). Unlike positive rsync limits, this is atomic; 0 and -1 both prohibit deletion
-u, --updateSkip regular files that are newer on the destination (directories, symlinks and specials are unaffected)
--ignore-existingSkip updating files that already exist on the destination
--existingNever create anything that doesn’t exist yet on the destination — files, symlinks, specials, directories, or the destination root itself; existing files are still updated
--max-size <SIZE>Don’t transfer regular files larger than SIZE (e.g. 100M). With –delete the destination copy of such a file is left alone
--min-size <SIZE>Don’t transfer regular files smaller than SIZE
--files-from <FILE>Copy only the paths listed in raw-byte FILE, securely opened before transfer (one per line, relative to the single source directory; - reads stdin). Listed directories are copied without their contents unless -r is given explicitly; missing parent directories are created
--from0–files-from entries are NUL-separated instead of one per line

Preview and output

Argument / optionMeaning
-v, --verbose...List files with -v; explain helpers and transport with -vv
-q, --quietSuppress non-error messages
-n, --dry-runResolve mappings and transport, then estimate transfers, exclusions, and deletions; leave source and destination data unchanged (remote setup may still cache the helper or install syq)

SSH and transport

Argument / optionMeaning
-z, --compressCompress remote data in transit with zstd (default)
--no-compressDisable transport compression
-e, --rsh <COMMAND>Remote shell command (default: ssh); controls agent forwarding when set
--rsync-path <PATH>Use this exact syq executable on the remote instead of the managed helper
--syq-no-bootstrapSyq extension: require syq on the remote PATH instead of installing a versioned helper
--syq-tcp-plainSyq extension: use TCP data connections without encryption (trusted networks only)
--syq-no-tcpSyq extension: send all data over ssh instead of separate TCP data connections
--syq-tcp-ports <LO-HI>Syq extension: port range the remote listens on for TCP data connections

[default: 47600-47699]
--syq-tcp-congestion <ALGO>Syq extension: use this congestion-control algorithm for TCP data sockets (Linux only)
--syq-pscope <PATH>Syq extension: use an isolated SSH persistence scope created by syq persist on --ephemeral

Performance tuning

Argument / optionMeaning
-B, --block-size <SIZE>Comparison and reuse block size (64K through 64M)

[default: 4M]
--performance-tuning <KEY=VALUE,...>Workers, request sizes, and copy methods

Resource limits

Argument / optionMeaning
--resource-limits <KEY=VALUE,...>Bandwidth and concurrency ceilings

Integrity checking

Argument / optionMeaning
--integrity-checking <KEY=VALUE,...>Comparison and transfer checksums
--syq-expected-hash <ALGORITHM:HEX>Require one regular file to match ALGORITHM:HEX

Progress and results

Argument / optionMeaning
--progressShow progress (default when stderr is a terminal)
--no-progressNever show progress
--syq-progress-jsonSyq extension: emit machine-readable progress lines (JSON) on stderr
--statsPrint transfer statistics, worker waits, endpoint operations and CPU at the end

Sources and selection

Argument / optionMeaning
[PATH]...Source(s) and destination

Help and version

Argument / optionMeaning
-V, --versionPrint version
--help-allShow all options and details
--helpShow common usage and options