forked from mac-cleanup/mac-cleanup-sh
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcleanup.sh
executable file
·189 lines (154 loc) · 5.22 KB
/
cleanup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#!/usr/bin/env bash
bytesToHuman() {
b=${1:-0}; d=''; s=0; 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
echo "$b$d ${S[$s]} of space was cleaned up"
}
deleteCaches() {
local cacheName=$1
shift
local paths=("$@")
echo "Initiating cleanup ${cacheName} cache..."
for folderPath in "${paths[@]}"; do
if [[ -d ${folderPath} ]]; then
dirSize=$(du -hs "${folderPath}" | awk '{print $1}')
echo "Deleting ${folderPath} to free up ${dirSize}..."
rm -rfv "${folderPath}" &>/dev/null
fi
done
}
# Default arguments
doUpdates=true
# Take in arguments
# Can add more arguments in the future
while getopts ":n" opt; do
case ${opt} in
n ) doUpdates=false
;;
\? )
printf 'A Mac Cleanup Utility by fwartner\n'
printf 'https://github.com/fwartner/mac-cleanup\n\n'
printf 'USAGE:\n cleanup [FLAGS]\n\n'
printf 'FLAGS:\n'
printf -- '-h, prints help menu\n'
printf -- '-n no brew updates\n'
exit
;;
esac
done
# Ask for the administrator password upfront
sudo -v
HOST=$( whoami )
# Keep-alive sudo until `clenaup.sh` has finished
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
oldAvailable=$(df / | tail -1 | awk '{print $4}')
echo 'Empty the Trash on all mounted volumes and the main HDD...'
sudo rm -rfv /Volumes/*/.Trashes/* &>/dev/null
sudo rm -rfv ~/.Trash/* &>/dev/null
echo 'Clear System Log Files...'
sudo rm -rfv /private/var/log/asl/*.asl &>/dev/null
sudo rm -rfv /Library/Logs/DiagnosticReports/* &>/dev/null
sudo rm -rfv /Library/Logs/Adobe/* &>/dev/null
rm -rfv ~/Library/Containers/com.apple.mail/Data/Library/Logs/Mail/* &>/dev/null
rm -rfv ~/Library/Logs/CoreSimulator/* &>/dev/null
echo 'Clear Adobe Cache Files...'
sudo rm -rfv ~/Library/Application\ Support/Adobe/Common/Media\ Cache\ Files/* &>/dev/null
echo 'Cleanup iOS Applications...'
rm -rfv ~/Music/iTunes/iTunes\ Media/Mobile\ Applications/* &>/dev/null
echo 'Remove iOS Device Backups...'
rm -rfv ~/Library/Application\ Support/MobileSync/Backup/* &>/dev/null
echo 'Cleanup XCode Derived Data and Archives...'
rm -rfv ~/Library/Developer/Xcode/DerivedData/* &>/dev/null
rm -rfv ~/Library/Developer/Xcode/Archives/* &>/dev/null
echo "Remove all watchman watches..."
watchman watch-del-all
echo "Cleanup RN packager cache..."
rm -rfv $TMPDIR/react-*
rm -rfv $TMPDIR/react-native-packager-cache-*
echo "Delete metro bundle cache..."
rm -rf $TMPDIR/metro-bundler-cache-*
if type "xcrun" &>/dev/null; then
echo 'Cleanup iOS Simulators...'
osascript -e 'tell application "com.apple.CoreSimulator.CoreSimulatorService" to quit'
osascript -e 'tell application "iOS Simulator" to quit'
osascript -e 'tell application "Simulator" to quit'
xcrun simctl shutdown all
xcrun simctl erase all
fi
if [ -d "/Users/${HOST}/Library/Caches/CocoaPods" ]; then
echo 'Cleanup CocoaPods cache...'
rm -rfv ~/Library/Caches/CocoaPods/* &>/dev/null
fi
# support delete Google Chrome caches
if [ -d "/Users/${HOST}/Library/Caches/Google/Chrome" ]; then
echo 'Cleanup Google Chrome cache...'
rm -rfv ~/Library/Caches/Google/Chrome/* &> /dev/null
fi
chromePaths=(
"/Users/${HOST}/Library/Caches/Google/Chrome"
"/Users/${HOST}/Library/Caches/com.google.Chrome"
)
deleteCaches "Google Chrome" "${chromePaths[@]}"
# support delete Mozilla Firefox caches
firefoxPaths=("/Users/${HOST}/Library/Caches/Firefox/" "/Users/${HOST}/Library/Caches/org.mozilla.firefox/")
deleteCaches "Mozilla Firefox" "${firefoxPaths[@]}"
# support delete gradle caches
if [ -d "/Users/${HOST}/.gradle/caches" ]; then
echo 'Cleanup Gradle cache...'
rm -rfv ~/.gradle/caches/ &> /dev/null
fi
# support delete Dropbox Cache
if [ -d "/Users/${HOST}/Dropbox" ]; then
echo 'Clear Dropbox 📦 Cache Files...'
sudo rm -rfv ~/Dropbox/.dropbox.cache/* &>/dev/null
fi
if type "composer" &> /dev/null; then
echo 'Cleanup composer...'
composer clearcache &> /dev/null
fi
if type "brew" &>/dev/null; then
if $doUpdates; then
echo 'Update Homebrew Recipes...'
brew update
echo 'Upgrade and remove outdated formulae'
brew upgrade
fi
echo 'Cleanup Homebrew Cache...'
brew cleanup -s &>/dev/null
#brew cask cleanup &>/dev/null
rm -rfv $(brew --cache) &>/dev/null
brew tap --repair &>/dev/null
fi
if type "gem" &> /dev/null; then
echo 'Cleanup any old versions of gems'
gem cleanup &>/dev/null
fi
if type "docker" &> /dev/null; then
echo 'Cleanup Docker'
docker system prune -af
fi
echo 'Cleanup pip cache...'
rm -rfv ~/Library/Caches/pip
if [ "$PYENV_VIRTUALENV_CACHE_PATH" ]; then
echo 'Removing Pyenv-VirtualEnv Cache...'
rm -rfv $PYENV_VIRTUALENV_CACHE_PATH &>/dev/null
fi
if type "npm" &> /dev/null; then
echo 'Cleanup npm cache...'
npm cache clean --force
fi
if type "yarn" &> /dev/null; then
echo 'Cleanup Yarn Cache...'
yarn cache clean --force
fi
echo 'Purge inactive memory...'
sudo purge
echo 'Success!'
newAvailable=$(df / | tail -1 | awk '{print $4}')
count=$((oldAvailable - newAvailable))
#count=$(( $count * 512))
bytesToHuman $count