#!/bin/bash # Use External Drive to Free Space for Update set -e echo "=== Use External Drive for Update ===" echo "" echo "External drive detected! This is your solution." echo "" # Find external drive EXTERNAL_VOLUMES=$(ls -d /Volumes/* 2>/dev/null | grep -v -E "Macintosh|Preboot|Recovery|VM|Download" || echo "") if [ -z "$EXTERNAL_VOLUMES" ]; then echo "⚠️ No external volumes found mounted" echo "" echo "Please:" echo " 1. Connect your external USB drive" echo " 2. Wait for it to mount" echo " 3. Run this script again" exit 1 fi echo "Found external volume(s):" echo "$EXTERNAL_VOLUMES" | while read vol; do SIZE=$(df -h "$vol" 2>/dev/null | tail -1 | awk '{print $2}') FREE=$(df -h "$vol" 2>/dev/null | tail -1 | awk '{print $4}') echo " - $vol ($SIZE total, $FREE free)" done echo "" # Use first external volume EXTERNAL_VOL=$(echo "$EXTERNAL_VOLUMES" | head -1) echo "Using: $EXTERNAL_VOL" echo "" FREE_SPACE=$(df / | tail -1 | awk '{print $4}') FREE_SPACE_GB=$(echo "scale=2; $FREE_SPACE / 1024 / 1024" | bc) echo "Current Mac free space: ${FREE_SPACE_GB}GB" echo "Need: 17.64GB" echo "" echo "📦 Large files you can move to external drive:" echo "" echo " Downloads: 8.7GB" echo " .ollama: 17GB" echo " .local: 18GB" echo " Total: ~44GB" echo "" echo "🔧 Steps:" echo "" echo "1. Move large files to external drive:" echo " mv ~/Downloads \"$EXTERNAL_VOL/Downloads_backup\"" echo " mv ~/.ollama \"$EXTERNAL_VOL/ollama_backup\"" echo " mv ~/.local \"$EXTERNAL_VOL/local_backup\"" echo "" echo "2. This should free ~44GB on Mac" echo "" echo "3. Install macOS update" echo "" echo "4. After update clears snapshot, move files back" echo "" read -p "Move Downloads, .ollama, and .local to external drive? (y/n) " -n 1 -r echo "" if [[ $REPLY =~ ^[Yy]$ ]]; then echo "" echo "Moving files..." # Move Downloads if [ -d ~/Downloads ]; then echo "Moving Downloads (8.7GB)..." mv ~/Downloads "$EXTERNAL_VOL/Downloads_backup" && \ echo " ✅ Moved Downloads" || \ echo " ⚠️ Error moving Downloads" mkdir ~/Downloads fi # Move .ollama if [ -d ~/.ollama ]; then echo "Moving .ollama (17GB)..." mv ~/.ollama "$EXTERNAL_VOL/ollama_backup" && \ echo " ✅ Moved .ollama" || \ echo " ⚠️ Error moving .ollama" fi # Move .local if [ -d ~/.local ]; then echo "Moving .local (18GB)..." mv ~/.local "$EXTERNAL_VOL/local_backup" && \ echo " ✅ Moved .local" || \ echo " ⚠️ Error moving .local" fi echo "" echo "⏳ Waiting for space to update..." sleep 5 NEW_FREE=$(df / | tail -1 | awk '{print $4}') NEW_FREE_GB=$(echo "scale=2; $NEW_FREE / 1024 / 1024" | bc) echo "" echo "New free space: ${NEW_FREE_GB}GB" echo "" if (( $(echo "$NEW_FREE_GB > 17" | bc -l) )); then echo "✅ Enough space! Now install update:" echo " System Settings → General → Software Update" echo " OR" echo " sudo softwareupdate --download --all" else echo "⚠️ Still not enough. May need to move more files." fi else echo "Cancelled." fi echo ""