Cron Jobs
Schedule regular scans on servers and workstations.
DuoBolt CLI is the command-line companion to the DuoBolt desktop app. It is designed for power users, automation workflows, CI pipelines, and server environments where a graphical interface is unnecessary.
The CLI performs the exact same duplicate file detection as the desktop app — including BLAKE3 hashing with default head+tail prehash (toggle with --no-prehash), symlink handling, and extension-based filtering.
Desktop (macOS) via Homebrew:
brew tap rnine/duoboltthenbrew install --cask duobolt-desktop.
Install with Homebrew (recommended):
brew tap rnine/duoboltbrew install duoboltVerify it works:
duobolt-cli --versionOr download the CLI binary (duobolt-cli) from the Download CLI section and move it into your PATH:
sudo mv duobolt-cli /usr/local/bin/Install with Scoop (recommended):
scoop bucket add duobolt https://github.com/rnine/scoop-duoboltscoop install duoboltVerify it works:
duobolt-cli --versionOr download the .exe binary and place it anywhere in your PATH, for example:
C:\Tools\duobolt-cli.exeduobolt-cli <directory...> [options]You can specify one or more directories to scan.
Examples:
duobolt-cli ~/Documentsduobolt-cli ~/Documents ~/Pictures --min-size=1MHead+tail prehashing is enabled by default and recommended. Use --no-prehash only if you explicitly need full hashing on every file.
| Option | Description |
|---|---|
--min-size=SIZE | Minimum file size. Accepts raw bytes or K/M/G/T/P/E + KiB…EiB. |
--chunk=MiB|auto | Hashing chunk size tuning (default: auto). |
--no-prehash | Disable head+tail prehash (enabled by default). |
--threads=N | Hashing (worker) threads (default: #CPUs). |
--follow-symlinks | Follow directory symlinks. |
--no-symlink-collapse | Treat hardlinks/symlinks as unique. |
--ignore-system-files | Skip system files (.DSStore, Thumbs.db, desktop.ini, .*). |
--ignore-library-containers | Skip macOS ~/Library/{Containers,Group Containers} (macOS only). |
--ignore-hidden-files | Skip files whose name starts with ’.’ (hidden files). |
--ignore-hidden-dirs | Skip directories whose name starts with ’.’. |
--only-ext=.mp3,.wav | Include only these file extensions (comma-separated, with dot). |
--exclude-ext=.csv,.js | Exclude these file extensions. |
--exclude-dir-ext=.app,.bundle | Exclude directories with these extensions. |
--output=txt|json|csv | Output format (default: txt). |
--quiet | Suppress the progress line. |
| Option | Description |
|---|---|
--no-cache | Disable hash cache. |
--cache-min-size-local=SIZE | Cache minimum file size for local volumes. |
--cache-min-size-network=SIZE | Cache minimum file size for network volumes. |
--cache-max-entries=N | Cache entry limit (0 = unlimited). |
--cache-max-bytes=SIZE | Cache size limit (0 = unlimited). |
--cache-preload-max-entries=N | Preload entry limit (0 = unlimited). |
--cache-preload-max-bytes=SIZE | Preload size limit (0 = unlimited). |
--cache-stats | Show cache statistics and exit. |
--cache-clear | Clear cache and exit. |
When --quiet is not set, the CLI prints cache metrics and stats at the end of the run.
Simple scan:
duobolt-cli ~/PhotosExport results as JSON:
duobolt-cli ~/Music --output=json --quiet > dupes.jsonOnly scan audio files:
duobolt-cli ~/Audio --only-ext=wav,flacIgnore OS junk + disable prehash (full hashing only):
duobolt-cli ~/Projects --ignore-system-files --no-prehashFull-speed multi-threaded scan:
duobolt-cli D:\Data --threads=12Disable cache for a one-off scan:
duobolt-cli ~/Backups --no-cacheScan multiple directories:
duobolt-cli ~/Documents ~/Pictures --min-size=1M| Code | Meaning |
|---|---|
0 | No duplicates found |
2 | Duplicates detected |
130 | Cancelled by user (Ctrl-C) |
| Other | Error occurred |
Cron Jobs
Schedule regular scans on servers and workstations.
CI/CD Pipelines
Detect duplicates in build artifacts and deployments.
Server Deduplication
Clean up file servers and shared storage.
NAS / Media Libraries
Manage large photo/video collections efficiently.
Example automation script (macOS/Linux):
#!/bin/bashduobolt-cli /mnt/storage --output=json --quiet > /var/reports/dupes.json