My Mac mini was telling me I had over 80GB of "System Data" to free up. CleanMyMac wanted €34/year. DaisyDisk wanted €10 just to tell me where the files were.
So I spent an evening writing a bash script instead.
The problem with "System Data" on macOS
If you've ever opened System Settings → General → Storage and seen a huge "System Data" slice, you know the feeling. macOS is notoriously vague about what's in there.
The real culprits are usually:
- Time Machine local snapshots — macOS keeps these silently on your SSD, often tens of GB
- Xcode DerivedData and archives — rebuilds from old projects you haven't touched in months
- Game data from titles you uninstalled ages ago
- iMazing or other backup apps storing full iPhone backups locally
- App caches that grow indefinitely and are never cleaned automatically
None of these show up clearly in Finder. You need to know where to look.
Step 1: find out where your space went
Before deleting anything, I built a diagnostic tool that uses Spotlight (mdfind) to instantly find files over 500 MB — no slow full-disk scan, results in seconds.
bash mac-find-space.sh
On my Mac it found, among other things:
- A 25 GB Windows 11 virtual machine I hadn't booted in months
- 22 GB of iMazing backups duplicating what was already on iCloud
- 6.5 GB of Magic: The Gathering Arena downloads from a game I quit playing
- 4.9 GB of macOS aerial wallpaper cache
- Several GB of Time Machine local snapshots that macOS never told me about
Total: over 80 GB of recoverable space, none of it visible at a glance.
Step 2: clean it safely
The main script — macos-cleanup.sh — runs in dry-run mode by default. It shows you everything it would delete without touching a single file.
# Preview (safe, nothing is deleted)
bash macos-cleanup.sh
# Clean interactively
bash macos-cleanup.sh --clean
# Clean everything automatically
bash macos-cleanup.sh --clean --yes
Here's what a dry-run looks like:
══════════════════════════════════════════════════════════
🍎 macOS Cleanup Utility
══════════════════════════════════════════════════════════
MODE: DRY-RUN — nothing will be deleted
Disk free before: 4.8 GB
══════════════════════════════════════════════════════════
[1] User caches ~/Library/Caches
[DRY-RUN] ~/Library/Caches 2.1 GB
[2] Logs
[DRY-RUN] ~/Library/Logs 1.6 GB
[DRY-RUN] /Library/Logs 23 MB
...
What it cleans
| Section | Notes |
|---|---|
| User & system caches | Regenerated automatically |
| Logs |
/Library/Logs, /private/var/log
|
| Temp files | Cleared on reboot anyway |
| Trash | All volumes |
| Xcode DerivedData, Archives, Simulators | Only if Xcode is installed |
| Time Machine local snapshots | via tmutil
|
| Homebrew / npm / pip cache | Only if installed |
| Webex upgrade packages | Old installer leftovers |
| Game data (optional, interactive) | MTG Arena, Pokémon TCG, Steam, Epic... |
| iMazing backups (optional) | Only if you have backups elsewhere |
| Aerial wallpapers (optional) | macOS re-downloads them if needed |
What it never touches
- iCloud Drive and OneDrive synced files
- iOS backups (shows size info only — remove via Finder)
- macOS system files
- Your documents, photos, downloads
Why not just use CleanMyMac?
Nothing wrong with it — it's a polished app. But:
- It costs money every year
- It runs in the background
- You can't read its source code
- It has more features than most people need
This script is ~200 lines of readable bash. You can open it, read every line, and know exactly what it does before running it. No black box.
Get it
git clone https://github.com/dadu14-code/mac-janitor.git
cd mac-janitor
bash mac-find-space.sh # find out where your GBs went
bash macos-cleanup.sh # preview what would be cleaned
bash macos-cleanup.sh --clean # clean when ready
GitHub: dadu14-code/mac-janitor
Tested on macOS Ventura, Sonoma and Sequoia. Pure bash, no dependencies, MIT license.
Feedback welcome — especially if you find new paths worth cleaning or test it on older macOS versions. PRs are open.
Top comments (0)