diff --git a/usr/local/bin/snigdhaos-cleanup.sh b/usr/local/bin/snigdhaos-cleanup.sh index f2fdf31..290402c 100755 --- a/usr/local/bin/snigdhaos-cleanup.sh +++ b/usr/local/bin/snigdhaos-cleanup.sh @@ -5,26 +5,17 @@ set -e # Exit immediately if a command exits with a non-zero status -# Colors for terminal output +# Colors RED="\033[1;31m" GREEN="\033[1;32m" YELLOW="\033[1;33m" BLUE="\033[1;34m" RESET="\033[0m" -# Log file path -LOG_FILE="/var/log/snigdhaos_cleanup.log" - -# Function to log messages -log_message() { - echo -e "$(date +'%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE -} - # Function to display error message and exit error_handler() { echo -e "\n${RED}๐Ÿšจ An error occurred during the cleanup process.${RESET}" - echo -e "${RED}Error on line $1. Please check the system logs for details.${RESET}" - log_message "Error occurred on line $1" + echo -e "${RED}Error on line $1. Please check your system and try again.${RESET}" exit 1 } @@ -35,16 +26,22 @@ trap 'error_handler $LINENO' ERR show_help() { echo -e "${BLUE}Usage: ${RESET}snigdhaos-cleanup.sh [OPTIONS]" echo -e "" - echo -e "${GREEN}This script cleans up your system by removing unused package caches, crash reports, application logs, application caches, and trash.${RESET}" + echo -e "${GREEN}This script will clean up your system by deleting unused package caches, crash reports, application logs, application caches, and trash.${RESET}" echo -e "" echo -e "${YELLOW}Options:${RESET}" echo -e " ${GREEN}-h, --help${RESET} Show this help message." - echo -e " ${GREEN}-v, --version${RESET} Show script version." + echo -e " ${GREEN}-v, --version${RESET} Display the script version." echo -e " ${GREEN}-f, --force${RESET} Skip confirmation prompt and force cleanup." + echo -e " ${GREEN}--dry-run${RESET} Simulate cleanup without deleting anything." + echo -e " ${GREEN}--rotate-logs${RESET} Rotate and archive logs instead of truncating them." + echo -e " ${GREEN}--memory-cache${RESET} Clean system memory cache." + echo -e " ${GREEN}--backup${RESET} Back up important configuration files." + echo -e " ${GREEN}--notify${RESET} Send a notification when the cleanup is complete." echo -e "" echo -e "Example usage:" - echo -e " snigdhaos-cleanup.sh # Starts the cleanup process with confirmation prompt." - echo -e " snigdhaos-cleanup.sh -f # Skips confirmation and forces cleanup." + echo -e " snigdhaos-cleanup.sh # Starts the cleanup process with a confirmation prompt." + echo -e " snigdhaos-cleanup.sh -f # Skips the confirmation and forces cleanup." + echo -e " snigdhaos-cleanup.sh --dry-run # See what would be cleaned without actually deleting." } # Function to display version information @@ -54,6 +51,11 @@ show_version() { # Parse command line options FORCE_CLEAN=false +DRY_RUN=false +ROTATE_LOGS=false +CLEAN_MEMORY_CACHE=false +BACKUP=false +NOTIFY=false while [[ "$#" -gt 0 ]]; do case "$1" in -h|--help) @@ -68,6 +70,26 @@ while [[ "$#" -gt 0 ]]; do FORCE_CLEAN=true shift ;; + --dry-run) + DRY_RUN=true + shift + ;; + --rotate-logs) + ROTATE_LOGS=true + shift + ;; + --memory-cache) + CLEAN_MEMORY_CACHE=true + shift + ;; + --backup) + BACKUP=true + shift + ;; + --notify) + NOTIFY=true + shift + ;; *) echo -e "${RED}โŒ Unknown option: $1${RESET}" show_help @@ -82,23 +104,83 @@ if [ "$EUID" -ne 0 ]; then exit 1 fi -# Function to calculate space freed -calculate_space_freed() { - local before_size - local after_size +# Function to send notifications +send_notification() { + MESSAGE="Cleanup completed successfully!" + notify-send "Cleanup Script" "$MESSAGE" || { echo -e "${RED}โŒ Failed to send notification.${RESET}"; exit 1; } + echo -e "${GREEN}โœ… Notification sent.${RESET}" +} - before_size=$(du -sh --exclude=/proc --exclude=/sys --exclude=/run --exclude=/tmp / | awk '{print $1}') - - # Running cleanup functions - clean_package_cache - clean_crash_reports - clean_application_logs - clean_application_caches - clean_trash +# Function to back up important config files +backup_config_files() { + BACKUP_DIR="/path/to/backup" + CONFIG_DIRS=("/etc" "/home/*/.config") + mkdir -p "$BACKUP_DIR" + for dir in "${CONFIG_DIRS[@]}"; do + sudo cp -r "$dir" "$BACKUP_DIR" || { echo -e "${RED}โŒ Failed to backup $dir.${RESET}"; exit 1; } + done + echo -e "${GREEN}โœ… Configuration files backed up.${RESET}" +} - after_size=$(du -sh --exclude=/proc --exclude=/sys --exclude=/run --exclude=/tmp / | awk '{print $1}') +# Function to clean memory cache +clean_memory_cache() { + echo -e "${YELLOW}โš ๏ธ Cleaning memory cache...${RESET}" + sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches || { echo -e "${RED}โŒ Failed to clean memory cache.${RESET}"; exit 1; } + echo -e "${GREEN}โœ… Memory cache cleaned.${RESET}" +} - echo -e "${GREEN}Space freed: $before_size -> $after_size${RESET}" +# Function to rotate logs +rotate_logs() { + LOG_DIR="/var/log" + LOG_ARCHIVE_DIR="/var/log/archives" + mkdir -p "$LOG_ARCHIVE_DIR" + sudo find "$LOG_DIR" -type f -name "*.log" -exec bash -c 'gzip -c "$0" > "$1/$(basename $0).gz" && truncate -s 0 "$0"' {} "$LOG_ARCHIVE_DIR" \; + echo -e "${GREEN}โœ… Logs rotated and archived.${RESET}" +} + +# Function to clean package cache +clean_package_cache() { + echo -e "${YELLOW}โš ๏ธ Deleting package cache...${RESET}" + if ! $DRY_RUN; then + sudo pacman -Sc --noconfirm || { echo -e "${RED}โŒ Failed to clean package cache.${RESET}"; exit 1; } + fi + echo -e "${GREEN}โœ… Package cache cleaned.${RESET}" +} + +# Function to clean crash reports +clean_crash_reports() { + echo -e "${YELLOW}โš ๏ธ Deleting crash reports...${RESET}" + CRASH_DIR="/var/lib/systemd/coredump" + if [ -d "$CRASH_DIR" ]; then + sudo rm -rf "$CRASH_DIR"/* || { echo -e "${RED}โŒ Failed to clean crash reports.${RESET}"; exit 1; } + echo -e "${GREEN}โœ… Crash reports cleaned.${RESET}" + else + echo -e "${GREEN}โœ… No crash reports found.${RESET}" + fi +} + +# Function to clean application logs +clean_application_logs() { + echo -e "${YELLOW}โš ๏ธ Truncating application logs...${RESET}" + LOG_DIR="/var/log" + sudo find "$LOG_DIR" -type f -name "*.log" -exec truncate -s 0 {} \; || { echo -e "${RED}โŒ Failed to clean application logs.${RESET}"; exit 1; } + echo -e "${GREEN}โœ… Application logs cleaned.${RESET}" +} + +# Function to clean application caches +clean_application_caches() { + echo -e "${YELLOW}โš ๏ธ Deleting application caches...${RESET}" + CACHE_DIR="/home/*/.cache" + sudo rm -rf $CACHE_DIR/* || { echo -e "${RED}โŒ Failed to clean application caches.${RESET}"; exit 1; } + echo -e "${GREEN}โœ… Application caches cleaned.${RESET}" +} + +# Function to empty trash +clean_trash() { + echo -e "${YELLOW}โš ๏ธ Emptying trash...${RESET}" + TRASH_DIR="/home/*/.local/share/Trash" + sudo rm -rf $TRASH_DIR/* || { echo -e "${RED}โŒ Failed to empty trash.${RESET}"; exit 1; } + echo -e "${GREEN}โœ… Trash emptied.${RESET}" } # Prompt for confirmation if not forced @@ -117,59 +199,32 @@ if ! $FORCE_CLEAN; then fi fi +# Run specific cleanup tasks based on flags echo -e "${BLUE}๐Ÿงน Starting cleanup process...${RESET}" -# Function to clean package cache -clean_package_cache() { - echo -e "${YELLOW}โš ๏ธ Deleting package cache (this will remove old cached packages)...${RESET}" - sudo pacman -Sc --noconfirm || { echo -e "${RED}โŒ Failed to clean package cache.${RESET}"; exit 1; } - log_message "Package cache cleaned" - echo -e "${GREEN}โœ… Package cache cleaned.${RESET}" -} +# Perform the selected cleanup tasks +if $BACKUP; then + backup_config_files +fi -# Function to clean crash reports -clean_crash_reports() { - echo -e "${YELLOW}โš ๏ธ Deleting crash reports...${RESET}" - CRASH_DIR="/var/lib/systemd/coredump" - if [ -d "$CRASH_DIR" ]; then - sudo rm -rf "$CRASH_DIR"/* || { echo -e "${RED}โŒ Failed to clean crash reports.${RESET}"; exit 1; } - log_message "Crash reports cleaned" - echo -e "${GREEN}โœ… Crash reports cleaned.${RESET}" - else - echo -e "${GREEN}โœ… No crash reports found.${RESET}" - fi -} +if $CLEAN_MEMORY_CACHE; then + clean_memory_cache +fi -# Function to clean application logs -clean_application_logs() { - echo -e "${YELLOW}โš ๏ธ Truncating application logs...${RESET}" - LOG_DIR="/var/log" - sudo find "$LOG_DIR" -type f -name "*.log" -exec truncate -s 0 {} \; || { echo -e "${RED}โŒ Failed to clean application logs.${RESET}"; exit 1; } - log_message "Application logs cleaned" - echo -e "${GREEN}โœ… Application logs cleaned.${RESET}" -} +if $ROTATE_LOGS; then + rotate_logs +else + clean_package_cache + clean_crash_reports + clean_application_logs + clean_application_caches + clean_trash +fi -# Function to clean application caches -clean_application_caches() { - echo -e "${YELLOW}โš ๏ธ Deleting application caches...${RESET}" - CACHE_DIR="/home/*/.cache" - sudo rm -rf $CACHE_DIR/* || { echo -e "${RED}โŒ Failed to clean application caches.${RESET}"; exit 1; } - log_message "Application caches cleaned" - echo -e "${GREEN}โœ… Application caches cleaned.${RESET}" -} - -# Function to empty trash -clean_trash() { - echo -e "${YELLOW}โš ๏ธ Emptying trash...${RESET}" - TRASH_DIR="/home/*/.local/share/Trash" - sudo rm -rf $TRASH_DIR/* || { echo -e "${RED}โŒ Failed to empty trash.${RESET}"; exit 1; } - log_message "Trash emptied" - echo -e "${GREEN}โœ… Trash emptied.${RESET}" -} - -# Calculate space freed before and after cleanup -calculate_space_freed +# Send notification if required +if $NOTIFY; then + send_notification +fi echo -e "\n${GREEN}โœ… Cleanup completed successfully!${RESET}" -log_message "Cleanup completed successfully" exit 0