9.7 KiB
macOS Cleanup Targets Reference
Detailed explanations of cleanup targets, their safety levels, and impact.
System Caches
~/Library/Caches
What it is: Application-level cache storage for user applications.
Contents:
- Browser caches (Chrome, Firefox, Safari)
- Application temporary files
- Download caches
- Thumbnail caches
- Font caches
Safety: 🟢 Safe to delete
Impact:
- Apps may be slower on first launch after deletion
- Websites may load slower on first visit (need to re-download assets)
- No data loss (caches are regenerated)
Size: Typically 10-100 GB depending on usage
Cleanup command:
rm -rf ~/Library/Caches/*
/Library/Caches
What it is: System-level cache storage (shared across all users).
Safety: 🟢 Safe to delete (requires sudo)
Impact: Same as user caches, but system-wide
Cleanup command:
sudo rm -rf /Library/Caches/*
Package Manager Caches
Homebrew Cache
Location: $(brew --cache) (typically ~/Library/Caches/Homebrew)
What it is: Downloaded package installers and build artifacts
Safety: 🟢 Safe to delete
Impact: Will need to re-download packages on next install/upgrade
Cleanup:
brew cleanup -s # Safe cleanup (removes old versions)
brew cleanup --prune=all # Aggressive cleanup (removes all cached downloads)
npm Cache
Location: ~/.npm or configured cache directory
Safety: 🟢 Safe to delete
Impact: Packages will be re-downloaded when needed
Cleanup:
npm cache clean --force
pip Cache
Location: ~/Library/Caches/pip (macOS)
Safety: 🟢 Safe to delete
Impact: Packages will be re-downloaded when needed
Cleanup:
pip cache purge
# or for pip3
pip3 cache purge
Application Logs
~/Library/Logs
What it is: Application log files
Safety: 🟢 Safe to delete
Impact: Loss of diagnostic information (only matters if debugging)
Typical size: 1-20 GB
Cleanup:
rm -rf ~/Library/Logs/*
/var/log (System Logs)
What it is: System and service log files
Safety: 🟢 Safe to delete old logs (requires sudo)
Impact: Loss of system diagnostic history
Note: macOS automatically rotates logs, manual deletion rarely needed
Application Data
~/Library/Application Support
What it is: Persistent application data, settings, and databases
Safety: 🟡 Caution required
Contains:
- Application databases
- User preferences and settings
- Downloaded content
- Plugins and extensions
- Save games
When safe to delete:
- Application is confirmed uninstalled
- Folder belongs to trial software no longer used
- Folder is for outdated version of app (check first!)
When to KEEP:
- Active applications
- Any folder you're uncertain about
Recommendation: Use find_app_remnants.py to identify orphaned data
~/Library/Containers
What it is: Sandboxed application data (for App Store apps)
Safety: 🟡 Caution required
Same rules as Application Support - only delete for uninstalled apps
~/Library/Preferences
What it is: Application preference files (.plist)
Safety: 🟡 Caution required
Impact of deletion: App returns to default settings
When to delete:
- App is confirmed uninstalled
- Troubleshooting a misbehaving app (as last resort)
Development Environment
Docker
ABSOLUTE RULE: NEVER use any prune command (docker image prune, docker volume prune, docker system prune, docker container prune). Always delete by specifying exact object IDs or names.
Images
What it is: Container images (base OS + application layers)
Safety: 🟡 Requires per-image verification
Analysis:
# List all images sorted by size
docker images --format "table {{.ID}}\t{{.Repository}}:{{.Tag}}\t{{.Size}}\t{{.CreatedSince}}" | sort -k3 -h -r
# Identify dangling images
docker images -f "dangling=true" --format "{{.ID}}\t{{.Size}}\t{{.CreatedSince}}"
# For EACH image, verify no container references it
docker ps -a --filter "ancestor=<IMAGE_ID>" --format "{{.Names}}\t{{.Status}}"
Cleanup (only after per-image verification):
# Remove specific images by ID
docker rmi a02c40cc28df 555434521374 f471137cd508
Containers
What it is: Running or stopped container instances
Safety: 🟡 Stopped containers may be restarted -- verify with user
Analysis:
docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Size}}"
Cleanup (only after user confirms each container/project):
# Remove specific containers by name
docker rm container-name-1 container-name-2
Volumes
What it is: Persistent data storage for containers
Safety: 🔴 CAUTION - May contain databases, user uploads, and irreplaceable data
Analysis:
# List all volumes
docker volume ls
# Check which container uses each volume
docker ps -a --filter "volume=<VOLUME_NAME>" --format "{{.Names}}\t{{.Status}}"
# CRITICAL: For database volumes (mysql, postgres, redis in name), inspect contents
docker run --rm -v <VOLUME_NAME>:/data alpine ls -la /data
docker run --rm -v <VOLUME_NAME>:/data alpine du -sh /data/*
Cleanup (only after per-volume confirmation, database volumes require content inspection):
# Remove specific volumes by name
docker volume rm project-mysql-data project-redis-data
Build Cache
What it is: Intermediate build layers
Safety: 🟢 Safe to delete (rebuilds just take longer)
Note: docker builder prune is the ONE exception to the prune prohibition -- build cache contains only intermediate layers, never user data.
Cleanup:
docker builder prune -a
node_modules
What it is: Installed npm packages for Node.js projects
Safety: 🟢 Safe to delete (can be regenerated)
Impact: Need to run npm install to restore
Finding large node_modules:
find ~ -name "node_modules" -type d -prune -print 2>/dev/null | while read dir; do
du -sh "$dir"
done | sort -hr
Cleanup:
# For old projects
rm -rf /path/to/old-project/node_modules
Python Virtual Environments
What it is: Isolated Python environments
Location: venv/, .venv/, env/ in project directories
Safety: 🟢 Safe to delete (can be recreated)
Impact: Need to recreate virtualenv and reinstall packages
Finding venvs:
find ~ -type d -name "venv" -o -name ".venv" 2>/dev/null
Git Repositories (.git directories)
What it is: Git version control data
Safety: 🟡 Depends on use case
When SAFE to delete:
- Project is archived and you have remote backup
- You only need final code, not history
When to KEEP:
- Active development
- No remote backup exists
- You might need the history
Cleanup (convert to plain folder, lose history):
rm -rf /path/to/old-project/.git
Large Files
Downloads Folder
What it is: Files downloaded from internet
Safety: 🟡 User judgment required
Common cleanable items:
- Old installers (.dmg, .pkg)
- Zip archives already extracted
- Temporary downloads
- Duplicate files
Check before deleting: Might contain important downloads
Disk Images (.dmg, .iso)
What it is: Mountable disk images, often installers
Safety: 🟢 Safe to delete after installation
Typical location: ~/Downloads
Cleanup: Delete .dmg files for already-installed apps
Archives (.zip, .tar.gz)
What it is: Compressed archives
Safety: 🟡 Check if extracted
Before deleting: Verify contents are extracted elsewhere
Old iOS Backups
Location: ~/Library/Application Support/MobileSync/Backup/
What it is: iTunes/Finder iPhone/iPad backups
Safety: 🟡 Caution - backup data
Check:
ls -lh ~/Library/Application\ Support/MobileSync/Backup/
Cleanup: Delete old backups via Finder preferences, not manually
Old Time Machine Local Snapshots
What it is: Local Time Machine backups
Safety: 🟢 Safe - macOS manages automatically
macOS automatically deletes these when disk space is low
Check:
tmutil listlocalsnapshots /
Manual cleanup (rarely needed):
tmutil deletelocalsnapshots <snapshot_date>
What to NEVER Delete
User Data Directories
~/Documents~/Desktop~/Pictures~/Movies~/Music
System Files
/System/Library/Apple(unless you know what you're doing)/private/etc
Security & Credentials
~/.ssh(SSH keys)~/Library/Keychains(passwords, certificates)- Any files containing credentials
Active Databases
*.db,*.sqlitefiles for running applications- Docker volumes in active use
Safety Checklist
Before deleting ANY directory:
- ✅ Do you know what it is?
- ✅ Is the application truly uninstalled?
- ✅ Have you checked if it's in use? (lsof, Activity Monitor)
- ✅ Do you have a Time Machine backup?
- ✅ Have you confirmed with the user?
When in doubt, DON'T DELETE.
Recovery Options
Trash vs. Permanent Deletion
Use Trash when possible:
# Move to trash (recoverable)
osascript -e 'tell app "Finder" to move POSIX file "/path/to/file" to trash'
Permanent deletion:
# Cannot be recovered without Time Machine
rm -rf /path/to/file
Time Machine
If you deleted something important:
- Open Time Machine
- Navigate to parent directory
- Select date before deletion
- Restore
File Recovery Tools
If no Time Machine backup:
- Disk Drill (commercial)
- PhotoRec (free, for photos)
- TestDisk (free, for files)
Note: Success rate depends on how recently deleted and disk usage since deletion.