#!/bin/bash # Быстрая очистка под освобождение места для Asahi Fedora: # - Кэш Homebrew # - Docker/Colima (неиспользуемые образы и тома) # - Бэкапы iPhone/iPad — только старые (опционально по возрасту) # - Xcode DerivedData (если установлен) # - ~/.vscode и ~/.windsurf (~0.7 ГБ), если не нужны # # Запуск: ./quick-cleanup-asahi.sh [--yes] # --yes выполнить все шаги без запросов подтверждения set -e YES="${1:-}" ask() { local msg="$1" if [ "$YES" = "--yes" ]; then echo "$msg (--yes: пропускаем вопрос)" return 0 fi read -p "$msg (y/n): " -n 1 -r echo [[ $REPLY =~ ^[yYдД]$ ]] } echo "==============================================" echo " Быстрая очистка для Asahi (освобождение места)" echo "==============================================" echo "" # --- 1. Кэш Homebrew --- if [ -d "$HOME/Library/Caches/Homebrew" ]; then size=$(du -sh "$HOME/Library/Caches/Homebrew" 2>/dev/null | cut -f1) echo "1. Кэш Homebrew: $size" if ask " Удалить кэш Homebrew?"; then rm -rf "$HOME/Library/Caches/Homebrew" echo " ✅ Кэш Homebrew удалён" else echo " Пропущено" fi else echo "1. Кэш Homebrew: не найден" fi echo "" # --- 2. Docker / Colima --- if command -v docker &>/dev/null; then echo "2. Docker: использование места:" docker system df 2>/dev/null || true if ask " Удалить неиспользуемые образы и тома? (docker image prune -a, volume prune)"; then docker image prune -af 2>/dev/null || true docker volume prune -f 2>/dev/null || true echo " ✅ Docker очищен" else echo " Пропущено" fi else echo "2. Docker: не установлен или не в PATH" fi echo "" # --- 3. Бэкапы iPhone/iPad — только старые --- BACKUP_ROOT="$HOME/Library/Application Support/MobileSync/Backup" if [ -d "$BACKUP_ROOT" ]; then echo "3. Бэкапы iOS (MobileSync):" du -sh "$BACKUP_ROOT" 2>/dev/null || true for dir in "$BACKUP_ROOT"/*/; do [ -d "$dir" ] || continue name=$(basename "$dir") size=$(du -sh "$dir" 2>/dev/null | cut -f1) age_days=$(( ( $(date +%s) - $(stat -f %m "$dir" 2>/dev/null || echo 0) ) / 86400 )) echo " $name — $size, изменён ~$age_days дн. назад" done echo " Удалять только вручную или через: Системные настройки → Основные → Хранилище → iOS." if ask " Удалить бэкапы старше 90 дней? (по дате изменения папки)"; then deleted=0 for dir in "$BACKUP_ROOT"/*/; do [ -d "$dir" ] || continue mtime=$(stat -f %m "$dir" 2>/dev/null || echo 0) now=$(date +%s) age_days=$(( ( now - mtime ) / 86400 )) if [ "$age_days" -gt 90 ]; then echo " Удаление: $dir (старше ${age_days} дн.)" rm -rf "$dir" && deleted=$((deleted + 1)) || true fi done echo " ✅ Удалено бэкапов: $deleted" else echo " Пропущено" fi else echo "3. Бэкапы iOS: папка не найдена" fi echo "" # --- 4. Xcode (если установлен) --- XCODE_DD="$HOME/Library/Developer/Xcode/DerivedData" if [ -d "$XCODE_DD" ]; then size=$(du -sh "$XCODE_DD" 2>/dev/null | cut -f1) echo "4. Xcode DerivedData: $size" if ask " Удалить DerivedData? (сборки пересоздадутся при следующем открытии проекта)"; then rm -rf "$XCODE_DD" echo " ✅ DerivedData удалён" else echo " Пропущено" fi else echo "4. Xcode DerivedData: не найден" fi echo "" # --- 5. ~/.vscode и ~/.windsurf --- total_editor=0 for d in "$HOME/.vscode" "$HOME/.windsurf"; do [ -d "$d" ] && total_editor=1 && break done if [ "$total_editor" -eq 1 ]; then echo "5. Редакторы (если пользуетесь только Cursor):" [ -d "$HOME/.vscode" ] && echo " ~/.vscode: $(du -sh "$HOME/.vscode" 2>/dev/null | cut -f1)" [ -d "$HOME/.windsurf" ] && echo " ~/.windsurf: $(du -sh "$HOME/.windsurf" 2>/dev/null | cut -f1)" if ask " Удалить ~/.vscode и ~/.windsurf? (расширения VS Code/Windsurf придётся поставить заново)"; then [ -d "$HOME/.vscode" ] && rm -rf "$HOME/.vscode" && echo " ✅ .vscode удалён" [ -d "$HOME/.windsurf" ] && rm -rf "$HOME/.windsurf" && echo " ✅ .windsurf удалён" else echo " Пропущено" fi else echo "5. .vscode / .windsurf: не найдены" fi echo "" echo "==============================================" echo " Готово. Свободное место:" df -h / | tail -1 echo "=============================================="