Files
local_machine/docs/disk_cleanup/scripts/quick-cleanup-asahi.sh
2026-03-14 20:03:57 +03:00

136 lines
5.2 KiB
Bash
Executable File

#!/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 "=============================================="