1st commit
This commit is contained in:
687
cleanup.sh
Executable file
687
cleanup.sh
Executable file
@@ -0,0 +1,687 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#When a query returns a non-zero status, the -e flag stops the script. It also detects errors in the currently executing script.
|
||||
set -E
|
||||
trap cleanup SIGINT SIGTERM ERR EXIT
|
||||
|
||||
cleanup() {
|
||||
trap - SIGINT SIGTERM ERR EXIT
|
||||
}
|
||||
|
||||
#italic="\033[3m"
|
||||
#underline="\033[4m"
|
||||
#ita_under="\033[3;4m"
|
||||
#bgd="\033[1;4;31m"
|
||||
#red="\033[1;31m"
|
||||
#bold="\033[1m"
|
||||
#box="\033[1;41m"
|
||||
#reset="\033[0m"
|
||||
|
||||
opt_cache=true
|
||||
opt_log=true
|
||||
opt_adobe=true
|
||||
opt_chrome=false #
|
||||
opt_ios_app=true
|
||||
opt_ios_device=true
|
||||
opt_xcode=true
|
||||
opt_xcrun=true
|
||||
opt_brew=false
|
||||
opt_gem=false # ok
|
||||
opt_npm=false # ok
|
||||
opt_go=false # ok
|
||||
opt_teams=true
|
||||
opt_dns=true
|
||||
opt_memory=true
|
||||
opt_periodic=true
|
||||
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: $(basename "${BASH_SOURCE[0]}") [-h] [-v] [-u]
|
||||
|
||||
A Mac Cleaning up Utility by fwartner
|
||||
https://github.com/mac-cleanup/mac-cleanup-sh
|
||||
|
||||
Available options:
|
||||
|
||||
-h, --help Print this help and exit
|
||||
-d, --dry-run Print approx space to be cleaned
|
||||
-u, --update Run brew update
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
# shellcheck disable=SC2034 # Unused variables left for readability
|
||||
setup_colors() {
|
||||
if [[ -t 2 ]] && [[ -z "${NO_COLOR-}" ]] && [[ "${TERM-}" != "dumb" ]]; then
|
||||
NOFORMAT='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' YELLOW='\033[1;33m' ITALIC='\033[3m' BOLD='\033[1m'
|
||||
else
|
||||
NOFORMAT='' RED='' GREEN='' ORANGE='' BLUE='' PURPLE='' CYAN='' YELLOW='' ITALIC='' BOLD=''
|
||||
fi
|
||||
}
|
||||
|
||||
msg() {
|
||||
# Si PAS -d | --dry-run
|
||||
#if [ -z "$dry_run" ]; then
|
||||
echo >&2 -e "${1-}"
|
||||
#fi
|
||||
}
|
||||
|
||||
die() {
|
||||
local msg=$1
|
||||
local code=${2-1} # default exit status 1
|
||||
msg "$msg"
|
||||
exit "$code"
|
||||
}
|
||||
|
||||
parse_params() {
|
||||
# default values of variables set from params
|
||||
update=false
|
||||
|
||||
while :; do
|
||||
case "${1-}" in
|
||||
-h | --help) usage ;;
|
||||
#-v | --verbose) set -x ;;
|
||||
-d | --dry-run) dry_run=true ;;
|
||||
--no-color) NO_COLOR=1 ;;
|
||||
#-u | --update) update=true ;; # update flag
|
||||
-n) true ;; # This is a legacy option, now default behaviour
|
||||
-?*) die "Unknown option: $1" ;;
|
||||
*) break ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
parse_params "$@"
|
||||
setup_colors
|
||||
|
||||
# [ -z EMPTYSTRING ]
|
||||
# [ -n NONEMPTYSTRING ]
|
||||
|
||||
if [ -n "$dry_run" ]; then
|
||||
msg "${RED}Running dry run mode !\n${NOFORMAT}"
|
||||
else
|
||||
echo
|
||||
fi
|
||||
|
||||
_bytesToHuman() {
|
||||
b=$1
|
||||
echo $b
|
||||
}
|
||||
|
||||
bytesToHuman() {
|
||||
b=${1:-0}
|
||||
d=''
|
||||
s=1
|
||||
S=(Bytes {K,M,G,T,E,P,Y,Z}iB)
|
||||
while ((b > 1024)); do
|
||||
d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"
|
||||
b=$((b / 1024))
|
||||
((s++))
|
||||
done
|
||||
|
||||
human_size="$b$d ${S[$s]}"
|
||||
echo $human_size
|
||||
}
|
||||
|
||||
count_dry() {
|
||||
#echo "count_dry"
|
||||
#local dry_results
|
||||
#local temp_dry_results
|
||||
for path in "${path_list[@]}"; do
|
||||
if [ -d "$path" ] || [ -f "$path" ]; then
|
||||
#echo "$path"
|
||||
temp_dry_results=$(sudo du -ck "$path" | tail -1 | awk '{ print $1 }')
|
||||
#echo "$path" "$temp_dry_results"
|
||||
dry_results="$((dry_results+temp_dry_results))"
|
||||
fi
|
||||
done
|
||||
echo $dry_results
|
||||
}
|
||||
|
||||
remove_paths() {
|
||||
if [ -z "$dry_run" ]; then
|
||||
echo -e -n "Clean up $(bytesToHuman $count_section) ? (y/n) "
|
||||
read -r -s -n1 clean_dry_run
|
||||
if [[ $clean_dry_run = "y" ]]; then
|
||||
for path in "${path_list[@]}"; do
|
||||
msg "Remove $path"
|
||||
#rm -rfv "$path" &>/dev/null
|
||||
done
|
||||
totalFree="$((totalFree+count_section))"
|
||||
|
||||
fi
|
||||
fi
|
||||
unset path_list
|
||||
}
|
||||
|
||||
collect_paths() {
|
||||
path_list+=("$@")
|
||||
}
|
||||
|
||||
# Ask for the administrator password upfront
|
||||
sudo -v
|
||||
|
||||
HOST=$(whoami)
|
||||
|
||||
# Keep-alive sudo until `mac-cleanup.sh` has finished
|
||||
while true; do
|
||||
sudo -n true
|
||||
sleep 60
|
||||
kill -0 "$$" || exit
|
||||
done 2>/dev/null &
|
||||
|
||||
# Enable extended regex
|
||||
shopt -s extglob
|
||||
|
||||
# Space cleaned counter
|
||||
totalFree=0
|
||||
|
||||
|
||||
### Display disk free size ###
|
||||
|
||||
msg "${BOLD}Free space on HDD...${NOFORMAT}\n"
|
||||
oldAvailable=$(df / | tail -1 | awk '{print $4}')
|
||||
msg "${BLUE}$(bytesToHuman $oldAvailable) available on /${NOFORMAT}"
|
||||
echo
|
||||
|
||||
|
||||
### Empty Trashes ###
|
||||
|
||||
msg "${BOLD}Emptying the Trash 🗑 on all mounted volumes and the main HDD...${NOFORMAT}"
|
||||
|
||||
collect_paths /Volumes/*/.Trashes/*
|
||||
collect_paths ~/.Trash/*
|
||||
|
||||
count_section=$(count_dry)
|
||||
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}"
|
||||
remove_paths
|
||||
echo "count_section $count_section"
|
||||
echo "totalFree $totalFree"
|
||||
|
||||
|
||||
### Empty System Cache Files ###
|
||||
|
||||
if [[ $opt_cache = true ]]; then
|
||||
msg "\n${BOLD}Clearing System Cache Files...${NOFORMAT}"
|
||||
|
||||
collect_paths /Library/Caches/*
|
||||
collect_paths /System/Library/Caches/*
|
||||
collect_paths ~/Library/Caches/*
|
||||
collect_paths /private/var/folders/bh/*/*/*/*
|
||||
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}System cache: $count_section${NOFORMAT}"
|
||||
#totalFree="$((totalFree+count_section))"
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}\n"
|
||||
remove_paths
|
||||
else
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}\n"
|
||||
unset path_list
|
||||
fi
|
||||
|
||||
echo "totalFree $totalFree"
|
||||
fi
|
||||
|
||||
|
||||
### Empty System Log Files ###
|
||||
|
||||
if [[ $opt_log = true ]]; then
|
||||
msg "\n${BOLD}Clearing System Log Files...${NOFORMAT}"
|
||||
|
||||
collect_paths /private/var/log/asl/*.asl
|
||||
collect_paths /Library/Logs/DiagnosticReports/*
|
||||
collect_paths /Library/Logs/CreativeCloud/*
|
||||
collect_paths /Library/Logs/Adobe/*
|
||||
collect_paths /Library/Logs/adobegc.log
|
||||
collect_paths ~/Library/Containers/com.apple.mail/Data/Library/Logs/Mail/*
|
||||
collect_paths ~/Library/Logs/CoreSimulator/*
|
||||
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}System log: $count_section${NOFORMAT}"
|
||||
#totalFree="$((totalFree+count_section))"
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}\n"
|
||||
remove_paths
|
||||
else
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}\n"
|
||||
unset path_list
|
||||
fi
|
||||
|
||||
echo "totalFree $totalFree"
|
||||
fi
|
||||
|
||||
### Adobe Cache ###
|
||||
|
||||
if [[ $opt_adobe = true ]]; then
|
||||
if [ -d ~/Library/Application\ Support/Adobe/ ]; then
|
||||
msg "\n${BOLD}Clearing Adobe Cache Files...${NOFORMAT}"
|
||||
|
||||
collect_paths ~/Library/Application\ Support/Adobe/Common/Media\ Cache\ Files/*
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}Adobe: $count_section${NOFORMAT}"
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}"
|
||||
remove_paths
|
||||
else
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}\n"
|
||||
unset path_list
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "totalFree $totalFree"
|
||||
fi
|
||||
|
||||
|
||||
### Google Chrome Cache ###
|
||||
|
||||
if [[ $opt_chrome = true ]]; then
|
||||
if [ -d ~/Library/Application\ Support/Google/Chrome/ ]; then
|
||||
msg "\n${BOLD}Clearing Google Chrome Cache Files...${NOFORMAT}"
|
||||
|
||||
collect_paths ~/Library/Application\ Support/Google/Chrome/Default/Application\ Cache/*
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}Chrome: $count_section${NOFORMAT}"
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}"
|
||||
remove_paths
|
||||
else
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}\n"
|
||||
unset path_list
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
### iOS Applications ###
|
||||
|
||||
if [[ $opt_ios_app = true ]]; then
|
||||
if [ -d ~/Music/iTunes/ ]; then
|
||||
msg "\n${BOLD}Cleaning up iOS Applications...${NOFORMAT}"
|
||||
|
||||
collect_paths ~/Music/iTunes/iTunes\ Media/Mobile\ Applications/*
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}iOS app: $count_section${NOFORMAT}"
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}"
|
||||
remove_paths
|
||||
else
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}\n"
|
||||
unset path_list
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "totalFree $totalFree"
|
||||
fi
|
||||
|
||||
|
||||
### iOS Device Backups ###
|
||||
|
||||
if [[ $opt_ios_device = true ]]; then
|
||||
|
||||
msg "\n${BOLD}Removing iOS Device Backups...${NOFORMAT}"
|
||||
|
||||
collect_paths ~/Library/Application\ Support/MobileSync/Backup/*
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}iOS device: $count_section${NOFORMAT}"
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}"
|
||||
remove_paths
|
||||
else
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}\n"
|
||||
unset path_list
|
||||
fi
|
||||
|
||||
echo "totalFree $totalFree"
|
||||
fi
|
||||
|
||||
|
||||
### Xcode ###
|
||||
|
||||
if [[ $opt_xcode = true ]]; then
|
||||
if [ -d ~/Library/Developer/Xcode/ ]; then
|
||||
|
||||
msg "\n${BOLD}Cleaning up XCode Derived Data and Archives...${NOFORMAT}"
|
||||
|
||||
collect_paths ~/Library/Developer/Xcode/DerivedData/*
|
||||
collect_paths ~/Library/Developer/Xcode/Archives/*
|
||||
collect_paths ~/Library/Developer/Xcode/iOS Device Logs/*
|
||||
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}xcode: $count_section${NOFORMAT}"
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}"
|
||||
remove_paths
|
||||
else
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}\n"
|
||||
unset path_list
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "totalFree $totalFree"
|
||||
fi
|
||||
|
||||
|
||||
# Xcrun
|
||||
|
||||
if [[ $opt_xcrun = true ]]; then
|
||||
|
||||
if type "xcrun" &>/dev/null; then
|
||||
msg "\n${BOLD}Cleaning up iOS Simulators...${NOFORMAT}\n"
|
||||
if [ -z "$dry_run" ]; then
|
||||
|
||||
# List available devices, device types, runtimes, or device pairs.
|
||||
# xcrun simctl list
|
||||
|
||||
# Shutdown a device. (<device> | all)
|
||||
# Specifying all will shut down all running devices
|
||||
# xcrun simctl shutdown all &>/dev/null
|
||||
|
||||
# Erase a device's contents and settings. ([... <device n>] | all)
|
||||
# Specifying all will erase all existing devices.
|
||||
# xcrun simctl erase all &>/dev/null
|
||||
|
||||
echo -e "Running ${ITALIC}xcrun simctl delete unavailable${NOFORMAT}"
|
||||
# Delete specified devices, unavailable devices, or all devices. ([... <device n>] | unavailable | all)
|
||||
# Specifying unavailable will delete devices that are not supported by the current Xcode SDK.
|
||||
# xcrun simctl delete unavailable
|
||||
else
|
||||
collect_paths ~/Library/Developer/CoreSimulator/Devices/*/data/!(Library|var|tmp|Media)
|
||||
collect_paths /Users/wah/Library/Developer/CoreSimulator/Devices/*/data/Library/!(PreferencesCaches|Caches|AddressBook)
|
||||
collect_paths ~/Library/Developer/CoreSimulator/Devices/*/data/Library/Caches/*
|
||||
collect_paths ~/Library/Developer/CoreSimulator/Devices/*/data/Library/AddressBook/AddressBook*
|
||||
echo ${path_list[@]}
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}xcrcun: $count_section${NOFORMAT}"
|
||||
unset path_list
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
### Brew ###
|
||||
|
||||
if [[ $opt_brew = true ]]; then
|
||||
|
||||
if type "brew" &>/dev/null; then
|
||||
msg "\n${BOLD}Cleaning up brew cache...${NOFORMAT}\n"
|
||||
collect_paths "$(brew --cache)"
|
||||
if [ -z "$dry_run" ]; then
|
||||
|
||||
# Remove stale lock files and outdated downloads for all formulae and casks, and remove old versions of installed formulae.
|
||||
# If arguments are specified, only do this for the given formulae and casks. Removes all downloads more than 120 days old.
|
||||
# This can be adjusted with HOMEBREW_CLEANUP_MAX_AGE_DAYS.
|
||||
|
||||
# -s: Scrub the cache, including downloads for even the latest versions. Note that downloads for any installed formulae or
|
||||
# casks will still not be deleted. If you want to delete those too: rm -rf "$(brew --cache)"
|
||||
|
||||
echo -e "Running ${ITALIC}brew cleanup -s${NOFORMAT}"
|
||||
# brew cleanup -s &>/dev/null
|
||||
free=$(brew cleanup -s --dry-run | grep -o -E " [0-9]{1,3}(B|KB|MB|GB) ")
|
||||
|
||||
msg "${BLUE}\nApprox $free of space has been cleaned up${NOFORMAT}\n"
|
||||
|
||||
echo -e "Running ${ITALIC}brew autoremove${NOFORMAT}"
|
||||
|
||||
# Uninstall formulae that were only installed as a dependency of another formula and are now no longer needed.
|
||||
brew autoremove --dry-run
|
||||
|
||||
# Migrate tapped formulae from symlink-based to directory-based structure.
|
||||
# brew tap --repair &>/dev/null
|
||||
|
||||
else
|
||||
echo -e "Running ${ITALIC}brew cleanup -s --dry-run${NOFORMAT}"
|
||||
free=$(brew cleanup -s --dry-run | grep -o -E " [0-9]{1,3}(B|KB|MB|GB) ")
|
||||
|
||||
msg "${BLUE}\nApprox $free of space will be cleaned up${NOFORMAT}\n"
|
||||
|
||||
echo -e "Running ${ITALIC}brew autoremove --dry-run${NOFORMAT}"
|
||||
|
||||
brew autoremove --dry-run
|
||||
|
||||
fi
|
||||
unset path_list
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
### gem ###
|
||||
|
||||
# The cleanup command removes old versions of gems from GEM_HOME that are not required to meet a dependency.
|
||||
# If a gem is installed elsewhere in GEM_PATH the cleanup command won't delete it.
|
||||
# If no gems are named all gems in GEM_HOME are cleaned.
|
||||
|
||||
if [[ $opt_gem = true ]]; then
|
||||
|
||||
if type "gem" &>/dev/null; then # TODO add count_dry
|
||||
msg "\n${BOLD}Cleaning up any old versions of gems...${NOFORMAT}"
|
||||
if [ -z "$dry_run" ]; then
|
||||
echo -e "Running ${ITALIC}gem cleanup${NOFORMAT}"
|
||||
#gem cleanup &>/dev/null
|
||||
else
|
||||
echo -e "Running ${ITALIC}gem cleanup -V --dry-run${NOFORMAT}"
|
||||
gem cleanup -V --dry-run
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
### npm ###
|
||||
|
||||
# prune: This command removes "extraneous" packages. If a package name is provided, then only packages matching one of the supplied names are removed.
|
||||
# Extraneous packages are those present in the node_modules folder that are not listed as any package's dependency list.
|
||||
# clean: Delete all data out of the cache folder. Note that this is typically unnecessary, as npm's cache is self-healing and resistant to data corruption issues.
|
||||
|
||||
if [[ $opt_npm = true ]]; then
|
||||
|
||||
if type "npm" &>/dev/null; then
|
||||
msg "\n${BOLD}Cleaning up npm cache...${NOFORMAT}"
|
||||
collect_paths ~/.npm/_cacache/*
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}npm: $count_section${NOFORMAT}"
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
echo -e "Running ${ITALIC}npm cache clean --force${NOFORMAT}"
|
||||
#npm cache clean --force &>/dev/null
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space has been cleaned up${NOFORMAT}."
|
||||
|
||||
echo -e "Running ${ITALIC}npm prune${NOFORMAT}"
|
||||
npm_prune=$(npm prune)
|
||||
[[ ! "$npm_prune" =~ "up to date in" ]] && echo "$npm_prune"
|
||||
else
|
||||
# npm cache clean --dry-run doesn't exist
|
||||
msg "${BLUE}Approx $(bytesToHuman $count_section) of space will be cleaned up by running ${ITALIC}npm cache clean --force${NOFORMAT}"
|
||||
|
||||
echo -e "Running ${ITALIC}npm prune --dry-run${NOFORMAT}"
|
||||
npm_prune=$(npm prune --dry-run)
|
||||
[[ ! "$npm_prune" =~ "up to date in" ]] && echo "$npm_prune"
|
||||
fi
|
||||
|
||||
unset path_list
|
||||
totalFree="$((totalFree+count_section))"
|
||||
echo -e "${RED}TOTAL: $totalFree${NOFORMAT}"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# Docker
|
||||
|
||||
# Pyenv
|
||||
|
||||
# yarn
|
||||
|
||||
# pnpm
|
||||
|
||||
# pod
|
||||
|
||||
### Cargo ###
|
||||
|
||||
# https://blog.rust-lang.org/2023/12/11/cargo-cache-cleaning.html
|
||||
|
||||
# https://github.com/matthiaskrgr/cargo-cache
|
||||
# cargo cache --autoclean
|
||||
# cargo cache --dry-run
|
||||
# Size changed 842.71 MB => 660.87 MB (-181.84 MB, -21.57%)
|
||||
|
||||
|
||||
# Remove artifacts from the target directory that Cargo has generated in the past.
|
||||
# With no options, cargo clean will delete the entire target directory.
|
||||
# When no packages are selected, all packages and all dependencies in the workspace are cleaned.
|
||||
# cargo clean --dry-run
|
||||
# cargo clean gc
|
||||
|
||||
# Remove one or more dependencies from a Cargo.toml manifest.
|
||||
# cargo remove --dry-run
|
||||
|
||||
### go ###
|
||||
|
||||
# ~/Library/Caches/go-build
|
||||
# 1 This directory holds cached build artifacts from the Go build system.
|
||||
# 2 Run "go clean -cache" if the directory is getting too large. The -cache flag causes clean to remove the entire go build cache.
|
||||
# 3 Run "go clean -fuzzcache" to delete the fuzz cache. The -fuzzcache flag causes clean to remove files stored in the Go build
|
||||
# cache for fuzz testing. The fuzzing engine caches files that expand code coverage, so removing them may make fuzzing less effective until
|
||||
# new inputs are found that provide the same coverage. These files are distinct from those stored in testdata directory; clean does not remove
|
||||
# those files.
|
||||
# 4 The -modcache flag causes clean to remove the entire module download cache, including unpacked source code of versioned dependencies.
|
||||
|
||||
|
||||
# GOCACHE='/Users/bruno/Library/Caches/go-build'
|
||||
# GOMODCACHE='/Users/bruno/go/pkg/mod'
|
||||
|
||||
# /Users/bruno/go/pkg/mod/cache
|
||||
|
||||
if [[ $opt_go = true ]]; then
|
||||
|
||||
if type "go" &>/dev/null; then
|
||||
msg "\n${BOLD}Clearing Go module cache...${NOFORMAT}"
|
||||
go_env=$(go env)
|
||||
go_cache=$(echo "$go_env" | grep GOCACHE | awk -F"=" '{print $2}' | tr -d "'")
|
||||
collect_paths "$go_cache"
|
||||
if [ -n "$GOPATH" ]; then
|
||||
collect_paths "$GOPATH/pkg/mod"
|
||||
else
|
||||
go_modcache=$(echo "$go_env" | grep GOMODCACHE | awk -F"=" '{print $2}' | tr -d "'")
|
||||
collect_paths "$go_modcache"
|
||||
fi
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}go: $count_section{NOFORMAT}"
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
echo -e "Remove the entire module download cache. Running ${ITALIC}go clean -modcache${NOFORMAT}"
|
||||
go clean -modcache &>/dev/null
|
||||
|
||||
echo -e "Remove the entire go build cache. Running ${ITALIC}go clean -cache${NOFORMAT}"
|
||||
go clean -cache &>/dev/null
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space has been cleaned up${NOFORMAT}"
|
||||
else
|
||||
msg "\n${BLUE}Approx $(bytesToHuman $count_section) of space will be cleaned up by running ${ITALIC}go clean -modcache${NOFORMAT}${BLUE} and ${ITALIC}go clean -cache${NOFORMAT}"
|
||||
fi
|
||||
|
||||
unset path_list
|
||||
totalFree="$((totalFree+count_section))"
|
||||
echo -e "${RED}TOTAL: $totalFree{NOFORMAT}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
### Deletes all Microsoft Teams Caches and resets it to default - can fix also some performance issues ###
|
||||
# -Astro
|
||||
|
||||
if [[ $opt_teams = true ]]; then
|
||||
if [ -d ~/Library/Application\ Support/Microsoft/Teams ]; then
|
||||
msg "\n${BOLD}Deleting Microsoft Teams logs and caches...${NOFORMAT}"
|
||||
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/IndexedDB
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/Cache
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/Application\ Cache
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/Code\ Cache
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/blob_storage
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/databases
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/gpucache
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/Local\ Storage
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/tmp
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/*logs*.txt
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/watchdog
|
||||
#collect_paths ~/Library/Application\ Support/Microsoft/Teams/*watchdog*.json
|
||||
|
||||
collect_paths ~/Library/Group\ Containers/UBF8T346G9.com.microsoft.teams/* # 776
|
||||
collect_paths ~/Library/Containers/com.microsoft.teams2/* # 26872
|
||||
# ~/Library/Containers/com.microsoft.teams2.launcher/
|
||||
# ~/Library/Containers/com.microsoft.teams2.notificationcenter/
|
||||
|
||||
collect_paths ~/Library/Application\ Support/Microsoft/Teams/* #977048
|
||||
[ -d ~/Library/Logs/Microsoft\ Teams/ ] && collect_paths ~/Library/Logs/Microsoft\ Teams/* # /
|
||||
[ -d ~/Library/Logs/Microsoft\ Teams\ Helper/ ] && collect_paths ~/Library/Logs/Microsoft\ Teams\ Helper/* # /
|
||||
[ -d ~/Library/Logs/Microsoft\ Teams\ Helper\ \(Renderer\)/ ] && collect_paths ~/Library/Logs/Microsoft\ Teams\ Helper\ \(Renderer\)/*
|
||||
count_section=$(count_dry)
|
||||
echo -e "${RED}teams: $count_section${NOFORMAT}"
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
# QUIT Teams
|
||||
/usr/bin/pkill -9 'Teams' &>/dev/null
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}"
|
||||
remove_paths
|
||||
else
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $count_section) of space will be cleaned up${NOFORMAT}"
|
||||
unset path_list
|
||||
fi
|
||||
|
||||
totalFree="$((totalFree+count_section))"
|
||||
echo -e "${RED}TOTAL: $totalFree${NOFORMAT}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [[ $opt_dns = true ]]; then
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
msg "\n${BOLD}Cleaning up DNS cache...${NOFORMAT}"
|
||||
echo -e "Running ${ITALIC}sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder${NOFORMAT}"
|
||||
#sudo dscacheutil -flushcache &>/dev/null
|
||||
#sudo killall -HUP mDNSResponder &>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [[ $opt_memory = true ]]; then
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
msg "\n${BOLD}Purging inactive memory...${NOFORMAT}"
|
||||
echo -e "Running ${ITALIC}sudo purge${NOFORMAT}"
|
||||
# force disk cache to be purged (flushed and emptied)
|
||||
#sudo purge &>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [[ $opt_periodic = true ]]; then
|
||||
|
||||
if [ -z "$dry_run" ]; then
|
||||
msg "\n${BOLD}Running the maintenance scripts...${NOFORMAT}"
|
||||
echo -e "Running ${ITALIC}sudo periodic daily weekly monthly${NOFORMAT}"
|
||||
#sudo periodic daily weekly monthly
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# End
|
||||
|
||||
msg "${GREEN}\nSuccess!${NOFORMAT}"
|
||||
msg "${BLUE}\nApprox $(bytesToHuman $totalFree) of space has been cleaned up${NOFORMAT}"
|
||||
|
||||
newAvailable=$(df / | tail -1 | awk '{print $4}')
|
||||
msg "${BLUE}$(bytesToHuman $newAvailable) available on /${NOFORMAT}"
|
||||
Reference in New Issue
Block a user