17 KiB
Rsync Manager Help
Rsync Manager is a macOS front end for rsync. It can run local copies, SSH-based remote synchronisation, dry runs, scheduled jobs, and file/folder watch jobs. Every run is recorded in History with the command, result and transfer statistics.
1. Before You Start
Rsync Manager looks for rsync in this order:
/opt/homebrew/bin/rsync/usr/local/bin/rsync/usr/bin/rsync
For the best compatibility with modern Linux servers, install a current rsync using Homebrew. The macOS supplied /usr/bin/rsync is older and behaves differently for some extended-attribute options.
SSH jobs also require the normal macOS ssh client and network access to the remote computer.
2. Create a Local Sync Job
- Select New Sync Job.
- Give the job a descriptive name, for example
Documents Backup. - Choose Local as the destination type.
- Select the source folder.
- Select the destination folder.
- Choose the required rsync options.
- Save the job.
- Run Dry Run first, then use Run Now when the result looks correct.
Example
Source:
/Users/mag/Documents/
Destination:
/Volumes/Backup/Documents/
A typical job using Archive mode is equivalent to:
rsync -a --human-readable --stats /Users/mag/Documents/ /Volumes/Backup/Documents/
Trailing slash behaviour
Rsync treats these differently:
/Users/mag/Documents/
copies the contents of Documents into the destination.
/Users/mag/Documents
copies the Documents directory itself into the destination.
Check the source carefully before enabling Delete mode.
3. Create an SSH Remote Job
- Create or edit a job.
- Select SSH Remote.
- Enter the remote host, for example
192.168.1.2orpegasus.local. - Enter the SSH username, for example
mag. - Set the SSH port, normally
22. - Select a private SSH key if required.
- Enter a remote destination path such as
/home/mag/backups/Documents. - Save and run a Dry Run.
Correct remote example
Host: pegasus.local
Username: mag
Destination: /home/mag/backups/photos
The resulting destination is similar to:
mag@pegasus.local:/home/mag/backups/photos
Incorrect remote destination
Do not put the host address in the Destination field. These are wrong:
192.168.1.2
mag@192.168.1.2
The Destination field must contain a path on the remote machine.
4. SSH Keys
Use the private key, not the .pub file.
Correct examples:
~/.ssh/id_ed25519
~/.ssh/id_rsa
Incorrect:
~/.ssh/id_ed25519.pub
If you accidentally select a .pub key and the matching private key exists beside it, Rsync Manager attempts to use the private key. If only the public key exists, the run is rejected.
Test SSH outside the app
Before troubleshooting rsync, verify SSH itself works:
ssh -p 22 -i ~/.ssh/id_ed25519 mag@pegasus.local
If that command cannot connect, fix SSH/network/authentication first.
5. Default Connection Settings
Open Rsync Manager > Settings > Connections to configure defaults for new SSH jobs:
- Default username
- Default host
- Default SSH port
- Default private key
- Default password storage
Passwords are stored in macOS Keychain, not SwiftData or UserDefaults. Current rsync execution is designed primarily around SSH keys or an SSH agent; a stored password is not placed on the command line.
6. Rsync Options
Archive
Archive mode (-a) is the normal choice for directory backup/synchronisation. It recursively copies files and preserves common metadata.
Compress
Compress (-z) can help on slower network links. It is often unnecessary for local copies or already-compressed files such as JPEG, ZIP and video.
Delete Extraneous Files
Delete mode (--delete) removes destination files that no longer exist at the source.
Use Dry Run before enabling a destructive sync. A mistaken source or destination combined with Delete can remove destination data.
Preserve Permissions
Preserves permissions when Archive mode is not being used.
Extended Attributes
On modern rsync, Rsync Manager uses -X. With Apple /usr/bin/rsync, local jobs use the Apple-compatible -E form. For SSH to modern Linux rsync, the Apple-only extended attribute flag is omitted to avoid an incompatible remote option.
Exclusions
Add patterns for files or directories you do not want transferred.
Examples:
.DS_Store
*.tmp
node_modules/
.git/
Additional arguments
Advanced rsync options can be entered as additional arguments. Use this only when you understand the rsync option and its effect.
Example:
--max-size=2G
7. Dry Run
Dry Run adds --dry-run. Rsync reports what it would change without transferring or deleting files.
Use Dry Run when:
- Creating a new job
- Changing source or destination paths
- Enabling Delete
- Changing exclusions
- Changing SSH destinations
- Testing a large sync
The summary window shows files checked, files that would transfer, data size and transfer statistics.
8. Run Now
Select a job and choose Run Now. Manual runs display a progress/result sheet. The complete stdout/stderr output is retained in History.
Only one rsync process is run by the current runner at a time. If another run is already active, a second job waits for the automation manager or is rejected for a direct manual launch depending on how it was triggered.
9. Scheduling Jobs
Edit a job and enable Schedule.
Available schedule types include:
- Once
- Hourly
- Daily
- Weekly
- Monthly
- Custom interval
Scheduled runs execute without displaying the manual progress sheet. Results still appear in History.
Daily example
Job: Nightly Documents
Schedule: Daily
Start time: 23:30
Result: the job runs each day at approximately the configured application schedule time while Rsync Manager is running.
Weekly example
Job: Weekly Photos
Schedule: Weekly
Choose the desired start date/time. The application calculates and displays the next run.
Custom interval example
Set a custom interval of 30 minutes to request a run every 30 minutes.
Avoid extremely short intervals for large jobs. A new run should not repeatedly start before the previous transfer has finished.
10. Calendar
Select Calendar at the top of the main window.
The calendar shows scheduled jobs by date and allows you to review upcoming automated work. Use it to confirm that a newly edited schedule produces the next run you expected.
If a job does not appear:
- Confirm the job is enabled.
- Confirm Schedule is enabled for that job.
- Confirm the start date is valid.
- Return to the job and check the displayed Next scheduled run value.
11. Watch for File or Folder Changes
Edit a job and enable File Watching.
Rsync Manager uses macOS FSEvents rather than repeatedly scanning the whole directory tree.
Watch the job source directory
Leave the custom watch path empty. The job source is watched automatically.
Example source:
/Users/mag/Developer/MyProject/
When changes occur beneath that directory, the watch service debounces the events and triggers the configured sync.
Watch one specific file
Set the watch path to a specific file, for example:
/Users/mag/Documents/config.json
The service watches the containing directory and filters events so only changes affecting that file trigger the job.
Debounce
Applications often save a file several times in quick succession. The debounce period groups those events into one rsync run.
Example:
Debounce: 5 seconds
Saving 10 files over a three-second period results in a single sync after activity settles, rather than 10 separate rsync processes.
Good watch-job examples
- Sync a development project to a test server after edits.
- Mirror a document directory to a local backup disk.
- Upload generated reports when files change.
- Synchronise a configuration directory to another Mac or Linux machine.
Avoid watch loops
Do not configure the destination inside the watched source tree. Otherwise rsync's own writes can generate more filesystem events and repeatedly trigger the job.
Bad example:
Source: /Users/mag/Data/
Destination: /Users/mag/Data/Backup/
Prefer a destination outside the watched source hierarchy.
12. Background Operation
Scheduled and file-watch jobs run without opening the manual progress sheet. The application must still be running for its scheduler and FSEvents watchers to operate.
Enable Launch at Login in Settings if you want Rsync Manager to start automatically after you sign in to macOS. You can then close or minimise the main window while the app continues running.
Quitting Rsync Manager stops in-process schedules and file watching until the application starts again.
13. Jobs Screen
The Jobs screen is the main status dashboard. Each job shows its key automation and run state.
Use the filters to review:
- All jobs
- Scheduled jobs
- Watching jobs
- Jobs with issues
Select a job to open its full detail view. The Edit Job button remains fixed at the top of the detail pane so it is available even after scrolling or on narrower windows.
14. History
Select History to review completed runs.
History records whether the run was started by:
- Manual action
- Schedule
- File change
Select a run to inspect:
- Start/end time
- Exit status
- rsync command
- Transfer summary
- stdout
- stderr
- Dry-run state
Use Export Log from the run result/detail view when you need a text copy for troubleshooting or auditing.
15. Common Rsync Exit Codes
0 — Success.
1 — Syntax or usage error.
2 — Protocol incompatibility.
3 — File selection/input-output errors.
10 — Socket I/O error.
11 — File I/O error.
12 — Error in rsync protocol data stream.
23 — Partial transfer due to error.
24 — Partial transfer because source files vanished during the run.
30 — Timeout in data send/receive.
Always inspect stderr in History for the actual diagnostic message.
16. Troubleshooting
Permission denied
Check that the macOS user running Rsync Manager can read the source and write to the destination. For remote jobs, check permissions for the remote SSH user.
Host key verification failed
Connect once using Terminal:
ssh mag@pegasus.local
Verify the host fingerprint and allow SSH to update ~/.ssh/known_hosts.
Do not disable host-key verification simply to hide this warning.
Public key authentication failed
Check:
- The private key path is correct.
- The remote user's
~/.ssh/authorized_keyscontains the matching public key. - File permissions on the remote
.sshdirectory/key files are valid. - The SSH username is correct.
Remote rsync option error
If you are using /usr/bin/rsync on macOS against modern Linux, avoid manually adding Apple-specific rsync options. Installing Homebrew rsync provides better modern compatibility.
Nothing transfers
Run a Dry Run and inspect the command and output. Check exclusions, trailing slash behaviour and whether source/destination already contain identical data.
Watch job does not trigger
Check that:
- The job is enabled.
- Global file watching is enabled in Settings.
- File Watching is enabled on the job.
- The watch path exists.
- Rsync Manager is still running.
- The change occurred beneath the watched path, or matches the selected single file.
Schedule does not run
Check that:
- Global scheduling is enabled in Settings.
- The job itself is enabled.
- Schedule is enabled for the job.
- The displayed next-run time is correct.
- Rsync Manager is running at the scheduled time.
17. Recommended Backup Workflow
For an important backup job:
- Create the job without Delete enabled.
- Run a Dry Run.
- Review the source and destination in the generated command.
- Run the job manually.
- Check History for exit code 0.
- Verify several files at the destination.
- Only then enable a schedule.
- Enable Delete only when you specifically require a mirror and understand the deletion behaviour.
Rsync synchronisation is not automatically a versioned backup. If the destination mirrors source deletions, it does not replace a separate versioned/offline backup strategy.
18. Example Configurations
Local external-drive backup
Name: Documents to USB
Source: /Users/mag/Documents/
Destination: /Volumes/Backup/Documents/
Archive: On
Delete: Off initially
Schedule: Daily at 22:00
Mac to Linux server
Name: Projects to Pegasus
Source: /Users/mag/Developer/
Host: pegasus.local
User: mag
Port: 22
Private key: /Users/mag/.ssh/id_ed25519
Remote destination: /home/mag/backups/Developer/
Archive: On
Compress: On
Schedule: Daily
Live project watcher
Name: Website Live Sync
Source: /Users/mag/Sites/MySite/
Remote destination: /var/www/mysite/
Watch: On
Watch path: leave empty to watch the source
Debounce: 5 seconds
Exclusions: .git/, node_modules/, .DS_Store
Use this style only when automatic deployment to that destination is intentional.
19. Safety Checklist
Before running a new job, confirm:
- Source is correct.
- Destination is correct.
- Remote host/user are correct.
- The selected SSH key is private, not
.pub. - Delete mode is intentional.
- Exclusions are correct.
- Dry Run output looks correct.
- The destination has enough free space.
- A watch destination is not inside its watched source.
20. Getting Help Information from the App
Select the Help button in the main Rsync Manager header. The bundled guide you are reading opens inside the application and is available without an Internet connection.
For an rsync-specific option not documented here, run man rsync in Terminal for the version of rsync installed on your Mac. Behaviour can differ between the Apple-supplied rsync and current Homebrew rsync.
Sync All
Use Sync All in the Jobs sidebar to run every enabled job in sequence. Rsync Manager queues the jobs rather than starting several rsync processes at once. Each job creates its own History entry, and the header shows the current batch progress. Disabled jobs are skipped.
Security and unattended operation
Rsync Manager is designed for direct Developer ID distribution. It uses the macOS Hardened Runtime and intentionally does not use the App Sandbox because the utility must launch rsync/ssh and work with arbitrary user-selected paths.
SSH security
SSH authentication uses a private key or your normal macOS SSH agent. Rsync Manager does not store SSH passwords and does not place passwords on a process command line. Automated SSH uses BatchMode=yes, a connection timeout, keepalive intervals and a finite keepalive failure count. Host-key verification is never disabled; connect to a new host once in Terminal first if SSH needs you to approve its host key.
Example:
ssh -p 22 -i ~/.ssh/id_ed25519 mag@pegasus.local
Protected advanced arguments
The Advanced field is for ordinary rsync tuning only. Rsync Manager rejects arguments that can replace the SSH transport, run a different remote command, read options/file lists from other files, write logs/batches to arbitrary paths, load a password file, enter daemon mode, remove source files or bypass the app's controlled delete switch. Examples that are rejected include -e, -M, --rsh, --rsync-path, --password-file, --files-from, --log-file, --write-batch, --remove-source-files and --delete*. Unmatched quotes and trailing escape characters are also rejected.
Delete protection
Manual --delete runs always show a destructive-operation warning. If a scheduled or file-watch job uses Delete, you must also explicitly enable Allow unattended delete in the job editor. This prevents a job from becoming destructively automated merely because Schedule or File Watch was enabled later.
Run a Dry Run and review the destination before authorising unattended delete.
Path overlap protection
For local jobs, source and destination must be separate directory trees. Rsync Manager rejects configurations where the destination is inside the source or the source is inside the destination. This prevents recursive backup trees and common file-watch loops.
History and privacy
Rsync Manager does not include analytics or tracking. Run output is sanitised before persistence, terminal control sequences are removed, likely credential-shaped values are redacted, and each stdout/stderr log is capped at approximately 2 MB. History retention is configurable in Settings > Automation > History & Privacy and defaults to 90 days.
The bundled privacy manifest declares no tracking and no collected data.
Release verification
The project contains Docs/RELEASE.md and Scripts/security-check.sh with Developer ID, notarisation, signature and Gatekeeper verification steps for production builds.