Files
MacOS-Clear-script/Clear.sh
2023-10-14 12:17:06 +02:00

255 lines
7.6 KiB
Bash
Executable File

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