bsssync
Fast, Simple File Backup
A lightweight command-line backup tool that copies a source folder to a destination, transferring only files that are new or have changed. Does the job quickly, tells you exactly what it's doing, and stays out of the way.
$ bsssync --src /projects --dst /Volumes/Backup/projects Scanning... src/components/ COPY src/components/Header.tsx COPY src/utils/helpers.ts SKIP README.md (up to date) DEL src/old-module.js Done. 2 copied, 1 deleted, 847 skipped. Elapsed: 1.3s
Key Features
Everything you need for reliable, fast backups — nothing you don't.
Incremental Sync
Compares files by size and modification time, skipping anything already up to date. Repeat runs are fast — only changed files are transferred.
Mirror Mode
Optionally deletes files from the destination that no longer exist in the source,
keeping it an exact copy. Use --mirror to enable.
Dry Run
See exactly what would be copied or deleted before anything is touched.
Use --dry-run to preview changes with zero risk.
Live Progress
Shows the current directory being scanned, updating in place without flooding the screen. Always know what it's doing.
Detailed Log
Optionally writes a timestamped log file of every action — every copy, skip, and delete — useful for auditing or troubleshooting.
ExFAT-Aware
Handles the coarse timestamp resolution of ExFAT external drives correctly, avoiding unnecessary re-copying on every run.
Symlink Support
Recreates symlinks at the destination by default. Use --dereference to
copy the actual file content instead.
Simple Installation
A single self-contained binary with no runtime or dependencies. The macOS installer places it on your PATH automatically — just open a new Terminal and go.
Double-Click on macOS
Create a simple .command file on macOS and your backup runs in Terminal
with a double-click — no scheduled tasks, no cloud sync, no subscription.
Simple to Use
A handful of flags covers everything you'll ever need.
Common Commands
Basic backup — copy new and changed files:
bsssync --src /source --dst /destination
Mirror mode — keep destination as exact copy:
bsssync --src /source --dst /destination --mirror
Dry run — preview changes without touching anything:
bsssync --src /source --dst /destination --dry-run
Mirror with log file:
bsssync --src /source --dst /dest --mirror --log ~/backups/sync.log
macOS .command File
Create a .command file on macOS to run your backup with a double-click.
No terminal knowledge needed — just save this as backup.command and make it executable.
#!/bin/bash # Backup my projects folder to external drive /usr/local/bin/bsssync \ --src ~/projects \ --dst /Volumes/ExternalDrive/projects-backup \ --mirror \ --log ~/backups/sync.log # Keep window open so you can see the result echo "" read -p "Done. Press Enter to close..."
Make it executable: chmod +x backup.command
All Flags
| Flag | Description |
|---|---|
--src <path> |
Source folder to copy from (required) |
--dst <path> |
Destination folder to copy to (required) |
--mirror |
Delete files from destination that are no longer in source |
--dry-run |
Preview what would happen without making any changes |
--log <file> |
Write a timestamped log of all actions to the specified file |
--verbose |
Print every file action, including skipped files |
--dereference |
Copy symlink targets as real files instead of recreating the link |
--help |
Show help and usage information |
Download
Free to use. No account required. Pick the build for your platform.
macOS
macOS 12 Monterey or later
Free to use for personal and commercial purposes. No account, no licence key, no telemetry.
Having trouble? Get in touch.
Ideal For
Built for the simple use case — fast, reliable backups without the ceremony.
External Drive Backups
Back up a working folder to an external drive quickly and reliably. ExFAT support means it works correctly with most external drives out of the box.
Developer Workflows
Mirror a project directory to a second location before a risky change. Fast incremental runs mean it fits into your workflow without slowing you down.
Simple Scripted Backups
Drop it in a shell script or .command file and run it whenever you need.
No daemons, no services, no background processes — just run it when you want it.