121 lines
3.2 KiB
Bash
Executable File
121 lines
3.2 KiB
Bash
Executable File
#!/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 ""
|