mikes-macos-developer-disk-cleanup 1.0.1 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +2 -4
- package/mikes-macos-disk-cleanup.sh +55 -22
- package/modules/android-avd.sh +2 -2
- package/modules/android-sdk.sh +14 -7
- package/modules/cocoapods.sh +32 -0
- package/modules/hints.sh +9 -0
- package/modules/node-modules.sh +5 -0
- package/modules/ruby-gems.sh +4 -0
- package/modules/xcode-artifacts.sh +3 -3
- package/package.json +2 -3
package/README.md
CHANGED
@@ -31,10 +31,8 @@ Currently it searches for (and cleans) the following items:
|
|
31
31
|
|
32
32
|
## How to Use the Script
|
33
33
|
|
34
|
-
1.
|
35
|
-
2.
|
36
|
-
3. Run the script by typing `./mikes-macos-disk-cleanup.sh`.
|
37
|
-
4. Panic because all your files are now gone and are never coming back.
|
34
|
+
1. `npx mikes-macos-developer-disk-cleanup`
|
35
|
+
2. Panic because all your files are now gone and are never coming back.
|
38
36
|
|
39
37
|
## Important Notes
|
40
38
|
|
@@ -26,6 +26,7 @@
|
|
26
26
|
# - Android SDK packages
|
27
27
|
# - Android AVDs
|
28
28
|
# - Homebrew caches
|
29
|
+
# - CocoaPods
|
29
30
|
|
30
31
|
# ==== CONFIGURATION DEFAULTS - change as needed ====
|
31
32
|
CONFIGFILE="${HOME}/.config/mikes-macos-disk-cleanup.env" # you'll be prompted to create this if it doesn't exist
|
@@ -68,9 +69,16 @@ if [ ${INITIALISED:-0} -ne 1 ]; then
|
|
68
69
|
fi
|
69
70
|
printf "DEVELOPMENT_BASE_DIR=${DEVELOPMENT_BASE_DIR}\n" >${CONFIGFILE}
|
70
71
|
echo "Configuration saved to ${CONFIGFILE}"
|
72
|
+
echo "NOTE: subsequent invocations will immediately commence deleting files!"
|
71
73
|
else
|
72
74
|
echo "Not saving configuration..."
|
73
75
|
fi
|
76
|
+
|
77
|
+
read -p "Deleting is about to start! Proceed? [y/n]" SHOULD_PROCEED
|
78
|
+
if [ "${SHOULD_PROCEED}" != "y" ]; then
|
79
|
+
echo "Exiting..."
|
80
|
+
exit 1
|
81
|
+
fi
|
74
82
|
fi
|
75
83
|
|
76
84
|
echo "Using development base directory: ${DEVELOPMENT_BASE_DIR}"
|
@@ -84,7 +92,12 @@ INITIALISED=1 # set to 1 so that the script will not prompt again (only really m
|
|
84
92
|
|
85
93
|
# ==== END OF CONFIGURATION ====
|
86
94
|
# get the full path for the current dir
|
87
|
-
|
95
|
+
# - if this is being run via "npx" then "${BASH_SOURCE[0]}" will be a symlink,
|
96
|
+
# so we need to get the full path to the script (and not just the symlink) so
|
97
|
+
# we can load the modules from the correct location
|
98
|
+
|
99
|
+
RESOLVED_SOURCE="$(node -e "const path = require('path');fs = require('fs');console.log(fs.realpathSync('${BASH_SOURCE[0]}'));")"
|
100
|
+
DIR=$(dirname "${RESOLVED_SOURCE}")
|
88
101
|
|
89
102
|
# ===== Error handling =======
|
90
103
|
# set -e: exit on error
|
@@ -115,29 +128,36 @@ INITIALSPACE=$(
|
|
115
128
|
)
|
116
129
|
echo "DISK USAGE BEFORE CLEANUP: ${INITIALSPACE}"
|
117
130
|
|
118
|
-
#
|
119
|
-
|
120
|
-
|
131
|
+
# addHint function
|
132
|
+
source "${DIR}/modules/hints.sh"
|
133
|
+
|
134
|
+
# CocoaPods
|
135
|
+
source "${DIR}/modules/cocoapods.sh"
|
136
|
+
cocoapods
|
121
137
|
|
122
|
-
#
|
123
|
-
|
124
|
-
|
138
|
+
# remove everything in ~/Library/Caches
|
139
|
+
source "${DIR}/modules/library-caches.sh"
|
140
|
+
libraryCaches
|
125
141
|
|
126
|
-
#
|
127
|
-
|
128
|
-
|
142
|
+
# remove everything from Trash - this sometimes prompts for confirmation
|
143
|
+
source "${DIR}/modules/trash.sh"
|
144
|
+
trash
|
129
145
|
|
130
|
-
#
|
131
|
-
|
132
|
-
|
146
|
+
# meteor
|
147
|
+
source "${DIR}/modules/meteor-builds-and-packages.sh"
|
148
|
+
meteorBuildsAndPackages
|
133
149
|
|
134
|
-
#
|
135
|
-
|
136
|
-
|
150
|
+
# npm cache
|
151
|
+
source "${DIR}/modules/npm-cache.sh"
|
152
|
+
npmCache
|
137
153
|
|
138
|
-
#
|
139
|
-
|
140
|
-
|
154
|
+
# yarn cache
|
155
|
+
source "${DIR}/modules/yarn-cache.sh"
|
156
|
+
yarnCache
|
157
|
+
|
158
|
+
# bun cache
|
159
|
+
source "${DIR}/modules/bun-cache.sh"
|
160
|
+
bunCache
|
141
161
|
|
142
162
|
# ### XCode ###
|
143
163
|
source "${DIR}/modules/xcode-artifacts.sh"
|
@@ -165,7 +185,20 @@ androidBuildFolders
|
|
165
185
|
|
166
186
|
# Android SDKs
|
167
187
|
source "${DIR}/modules/android-sdk.sh"
|
188
|
+
set +e ; # don't exit on error
|
168
189
|
androidSDK
|
190
|
+
RETCODE=$?
|
191
|
+
set -e; # exit on error
|
192
|
+
|
193
|
+
if [ ${RETCODE} -ne 0 ]; then
|
194
|
+
if [ ${RETCODE} -eq 100 ]; then
|
195
|
+
echo "Android SDK packages already only have one version installed. Proceeding."
|
196
|
+
else
|
197
|
+
echo "!!! Failed to clean up Android SDKs !!!"
|
198
|
+
echo " check the output above for more info"
|
199
|
+
exit ${RETCODE}
|
200
|
+
fi
|
201
|
+
fi
|
169
202
|
|
170
203
|
# Android AVDs
|
171
204
|
source "${DIR}/modules/android-avd.sh"
|
@@ -185,8 +218,8 @@ FINALSPACE=$(
|
|
185
218
|
}'
|
186
219
|
)
|
187
220
|
|
188
|
-
echo "
|
221
|
+
echo "============================== FINISHED! ================================="
|
189
222
|
|
190
|
-
echo "
|
191
|
-
echo "
|
223
|
+
echo "BEFORE CLEANUP: ${INITIALSPACE}"
|
224
|
+
echo "NOW: ${FINALSPACE}"
|
192
225
|
echo "${HINTS_UPON_FINISH}"
|
package/modules/android-avd.sh
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
androidAVD() {
|
2
2
|
# Android Virtual Device Cleanup
|
3
|
-
command -v avdmanager >/dev/null 2>&1 && {
|
3
|
+
command -v ${ANDROID_HOME}/tools/bin/avdmanager >/dev/null 2>&1 && {
|
4
4
|
# get the full path from one of the AVDs
|
5
5
|
local FIRST_AVD_PATH=$(avdmanager list avd | grep "Path:" | head -1 | tr -s " "| cut -f3 -d" ")
|
6
6
|
|
@@ -21,7 +21,7 @@ androidAVD() {
|
|
21
21
|
local AVDFOLDERSIZEAFTER=$(du -hs "${FIRST_AVD_PARENTPATH}" | cut -f1)
|
22
22
|
echo " AVD folder size before: ${AVDFOLDERSIZEBEFORE}; after: ${AVDFOLDERSIZEAFTER}"
|
23
23
|
} || {
|
24
|
-
echo "'avdmanager' command not found"
|
24
|
+
echo "'${ANDROID_HOME}/tools/bin/avdmanager' command not found"
|
25
25
|
return 1
|
26
26
|
}
|
27
27
|
}
|
package/modules/android-sdk.sh
CHANGED
@@ -2,23 +2,29 @@ androidSDK() {
|
|
2
2
|
local THISMODULEDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
3
3
|
|
4
4
|
# Android SDK Manager Cleanup
|
5
|
-
command -v sdkmanager >/dev/null 2>&1 && {
|
5
|
+
command -v ${ANDROID_HOME}/tools/bin/sdkmanager >/dev/null 2>&1 && {
|
6
6
|
|
7
7
|
local ANDROIDHOME_BEFORE=$(du -hs $ANDROID_HOME | cut -f1)
|
8
8
|
|
9
9
|
echo "=== android sdkmanager cleanup ==="
|
10
10
|
echo " - BEFORE CLEANUP: ${ANDROIDHOME_BEFORE} (${ANDROID_HOME})"
|
11
11
|
|
12
|
+
# remove .downloadIntermediates folder if it exists
|
13
|
+
if [ -d "${ANDROID_HOME}/.downloadIntermediates" ]; then
|
14
|
+
echo " - removing ${ANDROID_HOME}/.downloadIntermediates"
|
15
|
+
rm -rf "${ANDROID_HOME}/.downloadIntermediates"
|
16
|
+
fi
|
12
17
|
# create temporary output file
|
13
18
|
local OUTFILENAME=$(mktemp)
|
14
19
|
|
15
|
-
sdkmanager --list_installed --include_obsolete
|
20
|
+
local SDKMANAGER_OUTPUT=$(sdkmanager --list_installed --include_obsolete)
|
21
|
+
echo "${SDKMANAGER_OUTPUT}" |
|
16
22
|
awk -f "${THISMODULEDIR}/android-sdk.awk" -v outputFile="${OUTFILENAME}"
|
17
23
|
|
18
24
|
if [ $? -ne 0 ]; then
|
19
25
|
echo " WARNING: we couldn't parse the output of 'sdkmanager --list_installed --include_obsolete'"
|
20
|
-
echo " (
|
21
|
-
return
|
26
|
+
echo " (very likely there's just nothing to remove)"
|
27
|
+
return 100
|
22
28
|
fi
|
23
29
|
|
24
30
|
echo " - packages to remove: "
|
@@ -28,10 +34,11 @@ androidSDK() {
|
|
28
34
|
sdkmanager --uninstall --package_file="${OUTFILENAME}"
|
29
35
|
local ANDROIDHOME_AFTER=$(du -hs $ANDROID_HOME | cut -f1)
|
30
36
|
|
31
|
-
echo " - BEFORE CLEANUP: ${ANDROIDHOME_BEFORE} (${ANDROID_HOME})"
|
32
|
-
echo " - AFTER CLEANUP: ${ANDROIDHOME_AFTER}"
|
37
|
+
echo " - BEFORE ANDROID SDKMANAGER CLEANUP: ${ANDROIDHOME_BEFORE} (${ANDROID_HOME})"
|
38
|
+
echo " - AFTER ANDROID SDKMANAGER CLEANUP: ${ANDROIDHOME_AFTER}"
|
39
|
+
addHint "- You may need to run android's SDK manager to restore the Android SDK versions you were using"
|
33
40
|
} || {
|
34
|
-
echo "'sdkmanager' command not found"
|
41
|
+
echo "'${ANDROID_HOME}/tools/bin/sdkmanager' command not found"
|
35
42
|
return 1
|
36
43
|
}
|
37
44
|
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
cocoapods() {
|
2
|
+
if [ -d ${HOME}/.cocoapods ]; then
|
3
|
+
# Pods folders
|
4
|
+
echo "=== clearing Pods folders ==="
|
5
|
+
pod cache clean --all
|
6
|
+
echo " - looking for Pods folders in ${DEVELOPMENT_BASE_DIR}... "
|
7
|
+
local PODS_FOLDERS=$(
|
8
|
+
find -E "${DEVELOPMENT_BASE_DIR}" -type d \
|
9
|
+
-regex '^.*Pods$' \
|
10
|
+
-not -regex "${HOME}/\..*" \
|
11
|
+
-not -regex "^.*Pods.+"
|
12
|
+
)
|
13
|
+
echo " - found Pods folders:"
|
14
|
+
IFS=$'\n' # make newlines the only separator
|
15
|
+
for PODS_FOLDER in ${PODS_FOLDERS}; do
|
16
|
+
echo " - ${PODS_FOLDER}"
|
17
|
+
done
|
18
|
+
echo " - running 'rm -rf ' in each of the above"
|
19
|
+
local PODS_WERE_REMOVED=0
|
20
|
+
for PODS_FOLDER in ${PODS_FOLDERS}; do
|
21
|
+
PODS_WERE_REMOVED=1
|
22
|
+
local PODS_FOLDER_SIZE=$(du -hs "${PODS_FOLDER}" | cut -f1)
|
23
|
+
printf " - removing '${PODS_FOLDER}' (${PODS_FOLDER_SIZE}) ... "
|
24
|
+
rm -rf "${PODS_FOLDER}"
|
25
|
+
echo "done"
|
26
|
+
done
|
27
|
+
unset IFS
|
28
|
+
if [ ${PODS_WERE_REMOVED} -eq 1 ]; then
|
29
|
+
addHint "- You'll need to perform a 'pod install' (or npx pod-install) in each of your projects"
|
30
|
+
fi
|
31
|
+
fi
|
32
|
+
}
|
package/modules/hints.sh
ADDED
package/modules/node-modules.sh
CHANGED
@@ -13,13 +13,18 @@ nodeModules() {
|
|
13
13
|
for NODE_MODULE_FOLDER in ${NODE_MODULE_FOLDERS}; do
|
14
14
|
echo " - ${NODE_MODULE_FOLDER}"
|
15
15
|
done
|
16
|
+
local MODULESWERE_REMOVED=0
|
16
17
|
echo " - running 'rm -rf ' in each of the above"
|
17
18
|
for NODE_MODULE_FOLDER in ${NODE_MODULE_FOLDERS}; do
|
19
|
+
MODULESWERE_REMOVED=1
|
18
20
|
local NODE_MODULE_SIZE=$(du -hs "${NODE_MODULE_FOLDER}" | cut -f1)
|
19
21
|
printf " - removing '${NODE_MODULE_FOLDER}' (${NODE_MODULE_SIZE}) ... "
|
20
22
|
rm -rf "${NODE_MODULE_FOLDER}"
|
21
23
|
echo "done"
|
22
24
|
done
|
23
25
|
unset IFS
|
26
|
+
if [ ${MODULESWERE_REMOVED} -eq 1 ]; then
|
27
|
+
addHint "- You will need to reinstall node modules in each of your projects"
|
28
|
+
fi
|
24
29
|
|
25
30
|
}
|
package/modules/ruby-gems.sh
CHANGED
@@ -20,7 +20,7 @@ xcodeArtifacts() {
|
|
20
20
|
# Xcode DeviceLogs
|
21
21
|
if [ -d ${HOME}/Library/Developer/CoreSimulator/Caches ]; then
|
22
22
|
local XCCACHESIZE=$(du -hs ${HOME}/Library/Developer/CoreSimulator/Caches | cut -f1)
|
23
|
-
echo " removing Xcode Caches (${XCCACHESIZE})..."
|
23
|
+
echo " removing Xcode CoreSimulator Caches (${XCCACHESIZE})..."
|
24
24
|
rm -rf ${HOME}/Library/Developer/CoreSimulator/Caches
|
25
25
|
fi
|
26
26
|
|
@@ -35,11 +35,11 @@ xcodeArtifacts() {
|
|
35
35
|
awk '{\
|
36
36
|
r=$0;\
|
37
37
|
gsub(/^[^[:space:]]+[[:space:]]+/,"",r);\
|
38
|
-
printf("- This command would recover %s:\n rm -rf \"%s\"\n",$1, r);\
|
38
|
+
printf("- This command would recover an additional %s:\n rm -rf \"%s\"\n",$1, r);\
|
39
39
|
}'
|
40
40
|
)
|
41
41
|
echo "${DEVICESUPPORTCOMMAND}"
|
42
|
-
|
42
|
+
addHint "${DEVICESUPPORTCOMMAND}"
|
43
43
|
fi
|
44
44
|
fi # xcode
|
45
45
|
}
|
package/package.json
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
{
|
2
2
|
"name": "mikes-macos-developer-disk-cleanup",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.4",
|
4
4
|
"description": "Cleans up a developer's mac disk space. Aggressively.",
|
5
5
|
"bin": {
|
6
|
-
"mikes-macos-disk-cleanup": "mikes-macos-disk-cleanup.sh"
|
7
|
-
"modules": "modules"
|
6
|
+
"mikes-macos-disk-cleanup": "mikes-macos-disk-cleanup.sh"
|
8
7
|
},
|
9
8
|
"scripts": {
|
10
9
|
"test": "echo \"Error: no test specified\" && exit 1"
|