From 6d9f4f39a8681d486ef24737d0201fb09d8c6e23 Mon Sep 17 00:00:00 2001 From: Saravana Dhandapani Date: Wed, 21 May 2025 21:43:59 -0700 Subject: [PATCH] feat: clean up scripts --- clean_chrome.sh | 136 ++++++++++ cleanup.sh | 660 ++++++++++++++++++++++++++++++++++++++++++++++++ test.sh | 6 + 3 files changed, 802 insertions(+) create mode 100755 clean_chrome.sh create mode 100755 cleanup.sh create mode 100644 test.sh diff --git a/clean_chrome.sh b/clean_chrome.sh new file mode 100755 index 0000000..bdffacc --- /dev/null +++ b/clean_chrome.sh @@ -0,0 +1,136 @@ +#!/bin/bash + +# Script to safely remove Google Chrome and all its data +# This will remove the Chrome application, cache, and user data + +# Color codes for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Print with color +print_info() { + echo -e "${BLUE}INFO: $1${NC}" +} + +print_warning() { + echo -e "${YELLOW}WARNING: $1${NC}" +} + +print_error() { + echo -e "${RED}ERROR: $1${NC}" +} + +print_success() { + echo -e "${GREEN}SUCCESS: $1${NC}" +} + +# Check if Chrome is running +if pgrep "Google Chrome" > /dev/null; then + print_error "Google Chrome is currently running." + print_info "Please close Chrome completely before running this script." + exit 1 +fi + +# Paths to Chrome resources +CHROME_APP="/Applications/Google Chrome.app" +CHROME_CACHE="$HOME/Library/Caches/Google/Chrome" +CHROME_USER_DATA="$HOME/Library/Application Support/Google/Chrome" + +# Check if Chrome is installed +if [ ! -d "$CHROME_APP" ]; then + print_error "Google Chrome is not installed at $CHROME_APP." + exit 1 +fi + +# Calculate space before deletion +print_info "Calculating space used by Chrome..." +CHROME_APP_SIZE=$(du -sk "$CHROME_APP" | cut -f1) +CHROME_CACHE_SIZE=0 +CHROME_USER_DATA_SIZE=0 + +if [ -d "$CHROME_CACHE" ]; then + CHROME_CACHE_SIZE=$(du -sk "$CHROME_CACHE" | cut -f1) +fi + +if [ -d "$CHROME_USER_DATA" ]; then + CHROME_USER_DATA_SIZE=$(du -sk "$CHROME_USER_DATA" | cut -f1) +fi + +TOTAL_SIZE_KB=$((CHROME_APP_SIZE + CHROME_CACHE_SIZE + CHROME_USER_DATA_SIZE)) +TOTAL_SIZE_MB=$((TOTAL_SIZE_KB / 1024)) +TOTAL_SIZE_GB=$(echo "scale=2; $TOTAL_SIZE_KB/1048576" | bc) + +print_info "Chrome is currently using approximately $TOTAL_SIZE_GB GB of space:" +echo " - Chrome Application: $((CHROME_APP_SIZE / 1024)) MB" +echo " - Chrome Cache: $((CHROME_CACHE_SIZE / 1024)) MB" +echo " - Chrome User Data: $((CHROME_USER_DATA_SIZE / 1024)) MB" + +# Warning about data loss +print_warning "This will permanently delete Chrome and all its data, including:" +echo " - Browsing history" +echo " - Saved passwords (unless synced with your Google account)" +echo " - Bookmarks (unless synced with your Google account)" +echo " - Extensions and their data" +echo " - Any other user preferences and data" + +# Ask for confirmation +echo +echo "Are you sure you want to proceed with deletion? (yes/no)" +read -r CONFIRM + +if [[ ! "$CONFIRM" =~ ^[Yy][Ee][Ss]$ ]]; then + print_info "Operation cancelled. No changes were made." + exit 0 +fi + +# Begin deletion +print_info "Beginning Chrome cleanup..." + +# Remove Chrome application +print_info "Removing Chrome application..." +print_info "This requires administrator privileges. You'll be prompted for your password." +if sudo rm -rf "$CHROME_APP"; then + print_success "Chrome application removed successfully." +else + print_error "Failed to remove Chrome application." +fi + +# Remove Chrome cache +if [ -d "$CHROME_CACHE" ]; then + print_info "Removing Chrome cache..." + if rm -rf "$CHROME_CACHE"; then + print_success "Chrome cache removed successfully." + else + print_error "Failed to remove Chrome cache." + fi +else + print_info "Chrome cache directory not found. Skipping." +fi + +# Remove Chrome user data +if [ -d "$CHROME_USER_DATA" ]; then + print_info "Removing Chrome user data..." + if rm -rf "$CHROME_USER_DATA"; then + print_success "Chrome user data removed successfully." + else + print_error "Failed to remove Chrome user data." + fi +else + print_info "Chrome user data directory not found. Skipping." +fi + +# Final cleanup +print_info "Cleaning up any remaining Chrome preferences..." +rm -rf "$HOME/Library/Preferences/com.google.Chrome"* +rm -rf "$HOME/Library/Saved Application State/com.google.Chrome.savedState" + +# Success message +print_success "Chrome cleanup completed!" +print_success "Reclaimed approximately $TOTAL_SIZE_GB GB of disk space." +print_info "If you want to reinstall Chrome, you can download it from https://www.google.com/chrome/" + +exit 0 + diff --git a/cleanup.sh b/cleanup.sh new file mode 100755 index 0000000..4ad0850 --- /dev/null +++ b/cleanup.sh @@ -0,0 +1,660 @@ +#!/bin/bash + +# ========================================== +# System Cleanup Script for macOS +# ========================================== +# +# This script helps clean up various caches and temporary files to free up disk space. +# Use with caution - while this script tries to be safe, it's always good to have backups. +# +# Features: +# - Clean development tool caches (Homebrew, npm, pip, etc.) +# - Clean browser caches (Chrome, Firefox, Safari) +# - Clean application caches +# - Clean system caches and logs +# - Interactive menu to choose what to clean +# - Size reporting before and after cleaning +# +# Author: Saravana +# Created: 2025-05-21 +# ========================================== + +# ========================================== +# Color Definitions +# ========================================== +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +BLUE='\033[0;34m' +PURPLE='\033[0;35m' +CYAN='\033[0;36m' +NC='\033[0m' # No Color + +# ========================================== +# Helper Functions +# ========================================== + +# Print with color +print_header() { + echo -e "\n${CYAN}===== $1 =====${NC}\n" +} + +print_info() { + echo -e "${BLUE}INFO: $1${NC}" +} + +print_warning() { + echo -e "${YELLOW}WARNING: $1${NC}" +} + +print_error() { + echo -e "${RED}ERROR: $1${NC}" +} + +print_success() { + echo -e "${GREEN}SUCCESS: $1${NC}" +} + +print_size() { + path="$1" + if [ -e "$path" ]; then + size=$(du -sh "$path" 2>/dev/null | cut -f1) + echo -e "${PURPLE}Size of $path: $size${NC}" + else + echo -e "${PURPLE}$path does not exist${NC}" + fi +} + +# Check if a directory exists and has content +check_directory() { + local dir="$1" + if [ -d "$dir" ] && [ "$(ls -A "$dir" 2>/dev/null)" ]; then + return 0 + else + return 1 + fi +} + +# Get directory size in human-readable format +get_dir_size() { + local dir="$1" + if [ -d "$dir" ]; then + du -sh "$dir" 2>/dev/null | cut -f1 + else + echo "0B" + fi +} + +# Get directory size in bytes +get_dir_size_bytes() { + local dir="$1" + if [ -d "$dir" ]; then + du -s "$dir" 2>/dev/null | cut -f1 + else + echo "0" + fi +} + +# Get free disk space +get_free_space() { + df -h . | awk 'NR==2 {print $4}' +} + +# Confirm action +confirm() { + local prompt="$1" + local default="$2" + + if [ "$default" = "y" ]; then + local prompt_text="${prompt} [Y/n] " + else + local prompt_text="${prompt} [y/N] " + fi + + read -p "$prompt_text" response + + if [ -z "$response" ]; then + response="$default" + fi + + if [[ "$response" =~ ^[Yy]$ ]]; then + return 0 + else + return 1 + fi +} + +# ========================================== +# Cleanup Functions +# ========================================== + +# Clean Development Tool Caches +clean_dev_caches() { + print_header "Cleaning Development Tool Caches" + + # Homebrew + if check_directory "$HOME/homebrew/Caches" || check_directory "$HOME/Library/Caches/Homebrew"; then + print_info "Cleaning Homebrew caches..." + before_size=$(get_dir_size "$HOME/Library/Caches/Homebrew") + if confirm "Run 'brew cleanup' to remove old versions and downloads? This will free up space but require re-downloading if needed again." "y"; then + brew cleanup -s + rm -rf "$HOME/Library/Caches/Homebrew"/* + print_success "Homebrew cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/Homebrew")" + fi + fi + + # Node/npm + if check_directory "$HOME/.npm"; then + print_info "Cleaning npm cache..." + before_size=$(get_dir_size "$HOME/.npm") + if confirm "Clean npm cache?" "y"; then + npm cache clean --force + print_success "npm cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/.npm")" + fi + fi + + # pnpm + if check_directory "$HOME/.pnpm-store" || check_directory "$HOME/Library/Caches/pnpm"; then + print_info "Cleaning pnpm cache..." + before_size=$(get_dir_size "$HOME/.pnpm-store") + before_size2=$(get_dir_size "$HOME/Library/Caches/pnpm") + if confirm "Clean pnpm cache?" "y"; then + if command -v pnpm &>/dev/null; then + pnpm store prune + fi + rm -rf "$HOME/Library/Caches/pnpm"/* + print_success "pnpm cache cleaned. Before: $before_size + $before_size2, After: $(get_dir_size "$HOME/.pnpm-store") + $(get_dir_size "$HOME/Library/Caches/pnpm")" + fi + fi + + # Yarn + if check_directory "$HOME/.yarn/cache"; then + print_info "Cleaning Yarn cache..." + before_size=$(get_dir_size "$HOME/.yarn/cache") + if confirm "Clean Yarn cache?" "y"; then + if command -v yarn &>/dev/null; then + yarn cache clean + fi + print_success "Yarn cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/.yarn/cache")" + fi + fi + + # pip + if check_directory "$HOME/Library/Caches/pip"; then + print_info "Cleaning pip cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/pip") + if confirm "Clean pip cache?" "y"; then + if command -v pip &>/dev/null; then + pip cache purge + fi + rm -rf "$HOME/Library/Caches/pip"/* + print_success "pip cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/pip")" + fi + fi + + # Cypress + if check_directory "$HOME/Library/Caches/Cypress"; then + print_info "Cleaning Cypress cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/Cypress") + if confirm "Clean Cypress cache? This includes browser binaries that will need to be re-downloaded." "y"; then + rm -rf "$HOME/Library/Caches/Cypress"/* + print_success "Cypress cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/Cypress")" + fi + fi + + # Playwright + if check_directory "$HOME/Library/Caches/ms-playwright"; then + print_info "Cleaning Playwright browsers cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/ms-playwright") + if confirm "Clean Playwright browsers cache? These will need to be re-downloaded if used again." "y"; then + rm -rf "$HOME/Library/Caches/ms-playwright"/* + print_success "Playwright cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/ms-playwright")" + fi + fi + + # Gradle + if check_directory "$HOME/.gradle/caches"; then + print_info "Cleaning Gradle cache..." + before_size=$(get_dir_size "$HOME/.gradle/caches") + if confirm "Clean Gradle cache?" "y"; then + rm -rf "$HOME/.gradle/caches"/* + print_success "Gradle cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/.gradle/caches")" + fi + fi + + # CocoaPods + if check_directory "$HOME/Library/Caches/CocoaPods"; then + print_info "Cleaning CocoaPods cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/CocoaPods") + if confirm "Clean CocoaPods cache?" "y"; then + rm -rf "$HOME/Library/Caches/CocoaPods"/* + print_success "CocoaPods cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/CocoaPods")" + fi + fi + + # Go modules + if check_directory "$HOME/go/pkg/mod"; then + print_info "Cleaning Go module cache..." + before_size=$(get_dir_size "$HOME/go/pkg/mod") + if confirm "Clean Go module cache? These will be re-downloaded when needed." "y"; then + if command -v go &>/dev/null; then + go clean -modcache + fi + print_success "Go module cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/go/pkg/mod")" + fi + fi +} + +# Clean Browser Caches +clean_browser_caches() { + print_header "Cleaning Browser Caches" + + # Check and close browsers first + for browser in "Firefox" "Google Chrome" "Safari" "Microsoft Edge" "Brave Browser"; do + if pgrep "$browser" >/dev/null; then + print_warning "$browser is currently running." + if confirm "Would you like to close $browser before cleaning its cache?" "y"; then + osascript -e "tell application \"$browser\" to quit" + sleep 2 + else + print_warning "Skipping $browser cleanup to avoid potential issues." + continue + fi + fi + + case "$browser" in + "Firefox") + if check_directory "$HOME/Library/Caches/Firefox"; then + print_info "Cleaning Firefox cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/Firefox") + if confirm "Clean Firefox cache?" "y"; then + rm -rf "$HOME/Library/Caches/Firefox"/* + print_success "Firefox cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/Firefox")" + fi + fi + ;; + + "Google Chrome") + if check_directory "$HOME/Library/Caches/Google/Chrome"; then + print_info "Cleaning Chrome cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/Google/Chrome") + if confirm "Clean Chrome cache?" "y"; then + rm -rf "$HOME/Library/Caches/Google/Chrome"/* + print_success "Chrome cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/Google/Chrome")" + fi + fi + ;; + + "Safari") + if check_directory "$HOME/Library/Caches/com.apple.Safari"; then + print_info "Cleaning Safari cache..." + if confirm "Clean Safari cache?" "y"; then + print_warning "Safari caches require administrator privileges." + if confirm "Run with sudo (will prompt for password)?" "n"; then + sudo rm -rf "$HOME/Library/Caches/com.apple.Safari"/* + print_success "Safari cache cleaned." + fi + fi + fi + ;; + + "Microsoft Edge") + if check_directory "$HOME/Library/Caches/Microsoft Edge"; then + print_info "Cleaning Microsoft Edge cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/Microsoft Edge") + if confirm "Clean Microsoft Edge cache?" "y"; then + rm -rf "$HOME/Library/Caches/Microsoft Edge"/* + print_success "Microsoft Edge cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/Microsoft Edge")" + fi + fi + ;; + + "Brave Browser") + if check_directory "$HOME/Library/Caches/BraveSoftware/Brave-Browser"; then + print_info "Cleaning Brave Browser cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/BraveSoftware/Brave-Browser") + if confirm "Clean Brave Browser cache?" "y"; then + rm -rf "$HOME/Library/Caches/BraveSoftware/Brave-Browser"/* + print_success "Brave Browser cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/BraveSoftware/Brave-Browser")" + fi + fi + ;; + esac + done +} + +# Clean Application Caches +clean_app_caches() { + print_header "Cleaning Application Caches" + + # Check for common application caches + cache_dir="$HOME/Library/Caches" + + # List large application caches + print_info "Scanning for large application caches..." + + # Get top 10 largest cache directories + large_caches=$(find "$cache_dir" -type d -maxdepth 1 2>/dev/null | xargs du -sh 2>/dev/null | sort -hr | head -n 10) + + echo -e "${YELLOW}Largest application caches:${NC}" + echo "$large_caches" + echo + + # Spotify + if check_directory "$HOME/Library/Caches/com.spotify.client"; then + print_info "Cleaning Spotify cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/com.spotify.client") + if confirm "Clean Spotify cache? This may remove offline songs." "n"; then + rm -rf "$HOME/Library/Caches/com.spotify.client"/* + print_success "Spotify cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/com.spotify.client")" + fi + fi + + # Slack + if check_directory "$HOME/Library/Caches/com.tinyspeck.slackmacgap"; then + print_info "Cleaning Slack cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/com.tinyspeck.slackmacgap") + if confirm "Clean Slack cache?" "y"; then + rm -rf "$HOME/Library/Caches/com.tinyspeck.slackmacgap"/* + print_success "Slack cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/com.tinyspeck.slackmacgap")" + fi + fi + + # Visual Studio Code + if check_directory "$HOME/Library/Caches/com.microsoft.VSCode"; then + print_info "Cleaning VS Code cache..." + before_size=$(get_dir_size "$HOME/Library/Caches/com.microsoft.VSCode") + if confirm "Clean VS Code cache?" "y"; then + rm -rf "$HOME/Library/Caches/com.microsoft.VSCode"/* + print_success "VS Code cache cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches/com.microsoft.VSCode")" + fi + fi + + # Docker + if check_directory "$HOME/Library/Containers/com.docker.docker"; then + print_info "Found Docker containers cache..." + before_size=$(get_dir_size "$HOME/Library/Containers/com.docker.docker") + if confirm "Would you like to see Docker disk usage? (This will run 'docker system df')" "y"; then + if command -v docker &>/dev/null; then + docker system df + if confirm "Clean unused Docker data? (This will run 'docker system prune')" "n"; then + docker system prune -f + print_success "Docker unused data cleaned." + fi + else + print_error "Docker command not found." + fi + fi + fi + + # Clean other large caches + if confirm "Would you like to see and clean other large application caches?" "y"; then + print_info "Select cache directories to clean (enter numbers separated by space):" + + # Get all cache directories + cache_dirs=() + while IFS= read -r line; do + cache_dirs+=("$line") + done < <(find "$cache_dir" -type d -maxdepth 1 2>/dev/null | sort) + + # Get sizes for each directory + cache_sizes=() + for dir in "${cache_dirs[@]}"; do + if [ -d "$dir" ]; then + size=$(du -sh "$dir" 2>/dev/null | cut -f1) + cache_sizes+=("$size") + else + cache_sizes+=("") + fi + done + + # Display directories with their sizes + for i in "${!cache_dirs[@]}"; do + if [ -n "${cache_sizes[$i]}" ] && [ "${cache_dirs[$i]}" != "$cache_dir" ]; then + echo "$i) ${cache_sizes[$i]} - ${cache_dirs[$i]}" + fi + done + + read -p "Enter numbers to clean (or 'all' for all, 'skip' to skip): " selections + + if [ "$selections" = "all" ]; then + for i in "${!cache_dirs[@]}"; do + if [ "${cache_dirs[$i]}" != "$cache_dir" ] && [ -d "${cache_dirs[$i]}" ]; then + dir_name=$(basename "${cache_dirs[$i]}") + if confirm "Clean $dir_name (${cache_sizes[$i]})?" "n"; then + before_size=$(get_dir_size "${cache_dirs[$i]}") + rm -rf "${cache_dirs[$i]}"/* + print_success "$dir_name cache cleaned. Before: $before_size, After: $(get_dir_size "${cache_dirs[$i]}")" + fi + fi + done + elif [ "$selections" != "skip" ]; then + for sel in $selections; do + if [ -n "${cache_dirs[$sel]}" ] && [ "${cache_dirs[$sel]}" != "$cache_dir" ]; then + dir_name=$(basename "${cache_dirs[$sel]}") + before_size=$(get_dir_size "${cache_dirs[$sel]}") + rm -rf "${cache_dirs[$sel]}"/* + print_success "$dir_name cache cleaned. Before: $before_size, After: $(get_dir_size "${cache_dirs[$sel]}")" + fi + done + fi + fi +} + +# Clean System Caches and Logs +clean_system_caches() { + print_header "Cleaning System Caches and Logs" + + # macOS system logs + print_info "Checking system logs..." + if confirm "Clean system logs? This requires administrator privileges." "n"; then + print_warning "This will clear system logs. You'll be prompted for your password." + sudo rm -rf /private/var/log/* + print_success "System logs cleaned." + fi + + # Temporary files + print_info "Checking temporary files..." + before_size=$(get_dir_size /tmp) + if confirm "Clean temporary files in /tmp?" "y"; then + rm -rf /tmp/* 2>/dev/null + print_success "Temporary files cleaned. Before: $before_size, After: $(get_dir_size /tmp)" + fi + + # User cache + print_info "Checking user cache..." + before_size=$(get_dir_size "$HOME/Library/Caches") + if confirm "Clean all user caches? (This is aggressive and may remove important cached data)" "n"; then + find "$HOME/Library/Caches" -depth 1 -not -name "." -not -name ".." -exec rm -rf {} \; 2>/dev/null + print_success "User caches cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Caches")" + fi + + # Clear DNS cache + if confirm "Clear DNS cache?" "y"; then + sudo dscacheutil -flushcache + sudo killall -HUP mDNSResponder + print_success "DNS cache flushed." + fi + + # Application logs + if check_directory "$HOME/Library/Logs"; then + print_info "Checking application logs..." + before_size=$(get_dir_size "$HOME/Library/Logs") + if confirm "Clean application logs?" "y"; then + find "$HOME/Library/Logs" -type f -delete 2>/dev/null + print_success "Application logs cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Logs")" + fi + fi + + # XCode derived data + if check_directory "$HOME/Library/Developer/Xcode/DerivedData"; then + print_info "Checking XCode derived data..." + before_size=$(get_dir_size "$HOME/Library/Developer/Xcode/DerivedData") + if confirm "Clean XCode derived data? This is safe but will require rebuilding projects." "y"; then + rm -rf "$HOME/Library/Developer/Xcode/DerivedData"/* + print_success "XCode derived data cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Developer/Xcode/DerivedData")" + fi + fi + + # iOS Device Support files + if check_directory "$HOME/Library/Developer/Xcode/iOS DeviceSupport"; then + print_info "Checking iOS Device Support files..." + before_size=$(get_dir_size "$HOME/Library/Developer/Xcode/iOS DeviceSupport") + if confirm "Clean iOS Device Support files? These will be recreated when you connect iOS devices." "y"; then + rm -rf "$HOME/Library/Developer/Xcode/iOS DeviceSupport"/* + print_success "iOS Device Support files cleaned. Before: $before_size, After: $(get_dir_size "$HOME/Library/Developer/Xcode/iOS DeviceSupport")" + fi + fi + + # macOS trash + print_info "Checking trash bin..." + if [ -d "$HOME/.Trash" ]; then + before_size=$(get_dir_size "$HOME/.Trash") + if [ "$before_size" != "0B" ]; then + if confirm "Empty trash bin? This action cannot be undone." "n"; then + rm -rf "$HOME/.Trash"/* + print_success "Trash emptied. Before: $before_size, After: $(get_dir_size "$HOME/.Trash")" + fi + else + print_info "Trash is already empty." + fi + fi + + # Software update downloads + if check_directory "/Library/Updates"; then + if confirm "Clean software update downloads? This requires administrator privileges." "n"; then + print_warning "This will clear downloaded software updates. You'll be prompted for your password." + sudo rm -rf /Library/Updates/* + print_success "Software update downloads cleaned." + fi + fi +} + +# Show disk usage summary +show_disk_usage() { + print_header "Disk Usage Summary" + + # System disk usage + echo -e "${CYAN}System Disk Usage:${NC}" + df -h / | awk 'NR==1 || NR==2 {print}' + echo + + # User directory sizes + echo -e "${CYAN}User Directory Sizes:${NC}" + du -h -d 1 ~ 2>/dev/null | sort -hr | head -n 10 + echo + + # Large directories + echo -e "${CYAN}Large Directories:${NC}" + du -h -d 2 ~ 2>/dev/null | sort -hr | head -n 5 + echo + + # Development caches + echo -e "${CYAN}Development Tool Caches:${NC}" + print_size "$HOME/Library/Caches/Homebrew" + print_size "$HOME/.npm" + print_size "$HOME/Library/Caches/pip" + print_size "$HOME/Library/Caches/Cypress" + print_size "$HOME/Library/Caches/pnpm" + print_size "$HOME/Library/Caches/ms-playwright" + echo + + # Browser caches + echo -e "${CYAN}Browser Caches:${NC}" + print_size "$HOME/Library/Caches/Google/Chrome" + print_size "$HOME/Library/Caches/Firefox" + print_size "$HOME/Library/Caches/com.apple.Safari" + print_size "$HOME/Library/Caches/Microsoft Edge" + print_size "$HOME/Library/Caches/BraveSoftware/Brave-Browser" + echo +} + +# Main menu +main_menu() { + local initial_free_space=$(get_free_space) + + # Initial disk usage report + clear + print_header "MacOS Cleanup Utility" + echo -e "Current free space: ${GREEN}$initial_free_space${NC}" + echo + + while true; do + echo -e "${CYAN}Please select an option:${NC}" + echo "1) Show disk usage summary" + echo "2) Clean development tool caches" + echo "3) Clean browser caches" + echo "4) Clean application caches" + echo "5) Clean system caches and logs" + echo "6) Run all cleanups" + echo "7) Exit" + echo + + read -p "Enter your choice (1-7): " choice + echo + + case $choice in + 1) + show_disk_usage + ;; + 2) + clean_dev_caches + ;; + 3) + clean_browser_caches + ;; + 4) + clean_app_caches + ;; + 5) + clean_system_caches + ;; + 6) + print_header "Running All Cleanups" + print_warning "This will run all cleanup options. You'll be prompted for each action." + if confirm "Do you want to continue?" "n"; then + clean_dev_caches + clean_browser_caches + clean_app_caches + clean_system_caches + fi + ;; + 7) + break + ;; + *) + print_error "Invalid choice. Please enter a number between 1 and 7." + ;; + esac + + echo + echo -e "Press Enter to return to the menu..." + read + clear + print_header "MacOS Cleanup Utility" + echo -e "Current free space: ${GREEN}$(get_free_space)${NC} (was ${BLUE}$initial_free_space${NC})" + echo + done + + # Show final summary + local final_free_space=$(get_free_space) + print_header "Cleanup Complete" + echo -e "Initial free space: ${BLUE}$initial_free_space${NC}" + echo -e "Final free space: ${GREEN}$final_free_space${NC}" + + # Calculate space saved + local initial_bytes=$(echo "$initial_free_space" | sed 's/G//g') + local final_bytes=$(echo "$final_free_space" | sed 's/G//g') + + if (( $(echo "$final_bytes > $initial_bytes" | bc -l) )); then + local saved=$(echo "$final_bytes - $initial_bytes" | bc -l) + echo -e "You freed approximately ${GREEN}${saved}GB${NC} of disk space!" + fi + + echo + print_info "Thank you for using the MacOS Cleanup Utility!" + echo +} + +# Run main menu +main_menu diff --git a/test.sh b/test.sh new file mode 100644 index 0000000..d600a0a --- /dev/null +++ b/test.sh @@ -0,0 +1,6 @@ +alias_dir=$(dirname "$BASH_SOURCE") + +echo $alias_dir + +echo $BASH_SOURCE +