DEV Community

Cover image for I freed 80GB on my Mac with a bash script — no app, no subscription
dadu14-code
dadu14-code

Posted on

I freed 80GB on my Mac with a bash script — no app, no subscription

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
...
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)