Initial commit: local_machine docs and scripts
This commit is contained in:
135
docs/disk_cleanup/scripts/quick-cleanup-asahi.sh
Executable file
135
docs/disk_cleanup/scripts/quick-cleanup-asahi.sh
Executable file
@@ -0,0 +1,135 @@
|
||||
#!/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 "=============================================="
|
||||
Reference in New Issue
Block a user