#!/bin/sh Version="1.2" # Colors # Reset Color_Off='\033[0m' # Text Reset # Regular Colors Black='\033[0;30m' # Black Red='\033[0;31m' # Red Green='\033[0;32m' # Green Yellow='\033[0;33m' # Yellow Blue='\033[0;34m' # Blue Purple='\033[0;35m' # Purple Cyan='\033[0;36m' # Cyan White='\033[0;37m' # White # Bold BBlack='\033[1;30m' # Black BRed='\033[1;31m' # Red BGreen='\033[1;32m' # Green BYellow='\033[1;33m' # Yellow BBlue='\033[1;34m' # Blue BPurple='\033[1;35m' # Purple BCyan='\033[1;36m' # Cyan BWhite='\033[1;37m' # White ProgNameColor=$BYellow AuthorNameColor=$BGreen VersionColor=$BBlue BarColor=$Cyan FoundColor=$Blue SizeColor=$Green ClearableNameColor=$Yellow NotFoundColor=$Purple ResultSizeColor=$Green FoundText="${FoundColor}Found !${Color_Off}" set -e # Sudo function asksudo() { echo "Checking for sudo permissions..." if [[ "$EUID" = 0 ]]; then echo "${Green}Already have sudo !${Color_Off}" else sudo -k if sudo true; then echo "${Green}Correct password !${Color_Off}" else echo "${Red}Wrong password.${Color_Off}" exit 1 fi fi } # -- Clearing functions -- # coreSimClear() { CoreSimCaches="${HOME}/Library/Developer/CoreSimulator/Caches" echo "${BarColor}====== ${ClearableNameColor}CoreSimulator ${BarColor}======${Color_Off}" echo "Checking for ${ClearableNameColor}CoreSimulator${Color_Off}'s cache folder..." #if [[ -d "$CoreSimCaches" ]] if [ -n "$(ls -d ${CoreSimCaches}/* 2>/dev/null)" ]; then echo "${FoundText}" echo "Deleting ${ClearableNameColor}CoreSimulator${Color_Off}'s cache... ${SizeColor}($(du -sh ${CoreSimCaches} | cut -f1))${Color_Off}" cleared=$(($cleared+$(du -sk ${CoreSimCaches} | cut -f1))) sudo rm -rv ${CoreSimCaches}/* | pv -l -s $(du -a ${CoreSimCaches} | wc -l)> /dev/null else echo "${ClearableNameColor}CoreSimulator${Color_Off}'s cache ${NotFoundColor}not found${Color_Off}." fi } gradleJavaClear() { GradleJarFiles="${HOME}/.gradle/caches" echo "${BarColor}====== ${ClearableNameColor}Gradle ${BarColor}======${Color_Off}" echo "Checking for ${ClearableNameColor}gradle${Color_Off} java cache folders..." if [ -n "$(ls -d ${GradleJarFiles}/jars-* 2>/dev/null)" ]; then echo "${FoundText}" echo "Clearing ${ClearableNameColor}Gradle${Color_Off} java caches... ${SizeColor}($(du -sch ${GradleJarFiles}/jars-* | grep 'total' | cut -f1))${Color_Off}" cleared=$(($cleared+$(du -sck ${GradleJarFiles}/jars-* | grep 'total' | cut -f1))) sudo rm -rv ${GradleJarFiles}/jars-* | pv -l -s $(du -a ${GradleJarFiles}/jars-* | wc -l)> /dev/null else echo "${ClearableNameColor}Gradle${Color_Off} java cache folders ${NotFoundColor}not found${Color_Off}." fi } ################################################### ## Clean out older Fusion 360 installations ################################################### function deleteOldestInstallFusion360 () { echo "${BarColor}====== ${ClearableNameColor}Clearing outdated Fusion360 versions ${BarColor}======${Color_Off}" local targetDirectory="${HOME}/Library/Application Support/Autodesk/webdeploy/production" if [[ -d "$targetDirectory" ]] then local linkToFind="$(readlink ${HOME}/Library/Application\ Support/Autodesk/webdeploy/production/Autodesk\ Fusion\ 360.app)" local extractedFolderName="$(basename "$(dirname "$linkToFind")")" echo "Target Directory is '""$targetDirectory""'" echo "Currently used Fusion360 folder: ${extractedFolderName}" if [ "$extractedFolderName" == "" ] || [ "$extractedFolderName" == "." ]; then echo "${NotFoundColor}Unable to find the right folder${Color_Off}" else if [ "$linkToFind" == "" ]; then echo "${NotFoundColor}Unable to find the right folder${Color_Off}" else local toDelete=0 # Calculating the size of files to delete with an overly complex command toDelete=$(($toDelete$(find "$targetDirectory" -mindepth 1 -maxdepth 1 ! -name "$extractedFolderName" ! -name "Autodesk Fusion 360.app" ! -name ".DS_Store" -exec bash -c 'echo -n "+$(du -sk "$0" | cut -f1)"' "{}" \; ))) echo "Deleting folders... ${SizeColor}($(($toDelete/1024))M)${Color_Off}" # Updating cleared cleared=$(($cleared+$toDelete)) # Clearing folders w/ progression find "$targetDirectory" -mindepth 1 -maxdepth 1 ! -name "$extractedFolderName" ! -name "Autodesk Fusion 360.app" ! -name ".DS_Store" -exec sh -c 'sudo rm -rv "$0" | pv -l -s $(du -a "$0" | wc -l)> /dev/null' "{}" \; echo "Done!" fi fi else echo "${ClearableNameColor}Fusion360${Color_Off}'s folder ${NotFoundColor}not found${Color_Off}." fi } clearDocker() { if docker_exists="$(type -p "docker")" || [[ -z $docker_exists ]]; then echo "${BarColor}====== ${ClearableNameColor}Docker ${BarColor}======${Color_Off}" if [ "$(docker ps -a -q | wc -l)" -gt "0" ]; then echo "Found running docker containers, stopping them..." docker stop $(docker ps -a -q) docker rm $(docker ps -a -q) fi docker system prune --all --force else echo "${ClearableNameColor}Docker${Color_Off} was ${NotFoundColor}not found${Color_Off}." fi } clearFolderNew() { local folderPath="$2" local clearableName="$1" echo $folderPath echo "${BarColor}====== ${ClearableNameColor}${clearableName} ${BarColor}======${Color_Off}" echo "Checking for ${ClearableNameColor}${clearableName}${Color_Off}'s cache folder..." if [ -n "$(find "${folderPath}" -mindepth 1 -maxdepth 1 2>/dev/null)" ]; then echo "${FoundText}" echo "Clearing ${ClearableNameColor}${clearableName}${Color_Off}'s cache... ${SizeColor}($(du -sh "${folderPath}" | cut -f1))${Color_Off}" addClearedVal cleared "$(du -sk "${folderPath}" | cut -f1)" sudo rm -rv "${folderPath}"/* | pv -l -s $(du -a "${folderPath}" | wc -l)> /dev/null else echo "${ClearableNameColor}${clearableName}${Color_Off}'s cache ${NotFoundColor}not found${Color_Off}." fi } addClearedVal() { local clearedValueToAdd="$2" if [[ -z $clearedValueToAdd ]]; then clearedValueToAdd=0; fi if [[ -z $cleared ]]; then cleared=0; fi cleared=$(($cleared+$clearedValueToAdd)) local return_var="$1" eval "$return_var"='$cleared' } # ------------------------ # # -- Steps -- # browserCleanup() { clearFolderNew "Firefox" "${HOME}/Library/Caches/Firefox" } developmentCleanup() { # Don't delete the folder clearFolderNew "CoreSimulator" "${HOME}/Library/Developer/CoreSimulator/Caches" gradleJavaClear clearFolderNew "JetBrains" "${HOME}/Library/Caches/JetBrains" clearFolderNew "VisualStudioInstaller" "${HOME}/Library/Caches/VisualStudioInstaller" clearFolderNew "VisualStudio" "${HOME}/Library/Caches/VisualStudio" } # ------------------------ # # -- Main Script -- # echo "${BarColor}==========================================${Color_Off}" echo " Script ${ProgNameColor}Clear.sh${Color_Off} by ${AuthorNameColor}Skydust " echo " ${VersionColor}v${Version}${Color_Off} " echo "${BarColor}==========================================${Color_Off}" # Elevate permissions... asksudo # Clearing... developmentCleanup browserCleanup clearFolderNew "Thunderbird" "${HOME}/Library/Caches/Thunderbird" clearFolderNew "Homebrew" "${HOME}/Library/Caches/Homebrew" # Discord needs to not have its cache folder deleted fully clearFolderNew "Discord" "${HOME}/Library/Application Support/discord/Cache" clearFolderNew "Adobe" "${HOME}/Library/Caches/Adobe" deleteOldestInstallFusion360 clearDocker # Print final echo "${BarColor}==========================================${Color_Off}" echo "Cleared ${ResultSizeColor}$(($cleared/1024))M${Color_Off} !" echo "${BarColor}==========================================${Color_Off}"