76 lines
2.3 KiB
Text
76 lines
2.3 KiB
Text
|
|
||
|
#!/bin/bash
|
||
|
|
||
|
# Required parameters:
|
||
|
# @raycast.schemaVersion 1
|
||
|
# @raycast.title Uninstall App
|
||
|
# @raycast.mode fullOutput
|
||
|
|
||
|
# Optional parameters:
|
||
|
# @raycast.icon 🗑️
|
||
|
# @raycast.argument1 { "type": "text", "placeholder": "App name" }
|
||
|
|
||
|
# Documentation:
|
||
|
# @raycast.description Move an application and its related files to the Trash
|
||
|
|
||
|
app_name="$1"
|
||
|
|
||
|
move_to_trash() {
|
||
|
local file_path="$1"
|
||
|
osascript -e "tell application \"Finder\" to delete POSIX file \"$file_path\"" > /dev/null 2>&1
|
||
|
}
|
||
|
|
||
|
uninstall_app() {
|
||
|
local app_name="$1"
|
||
|
|
||
|
if [[ ! "$app_name" =~ \.app$ ]]; then
|
||
|
app_name="${app_name}.app"
|
||
|
fi
|
||
|
|
||
|
local app_paths=$(mdfind "kMDItemKind == 'Application' && kMDItemDisplayName == '${app_name%.*}'")
|
||
|
|
||
|
if [ -z "$app_paths" ]; then
|
||
|
echo "Application not found. Please check the name and try again."
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
if [ $(echo "$app_paths" | wc -l) -gt 1 ]; then
|
||
|
echo "Multiple applications found:"
|
||
|
select app_path in $app_paths; do
|
||
|
if [ -n "$app_path" ]; then
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
else
|
||
|
app_path=$app_paths
|
||
|
fi
|
||
|
|
||
|
echo "Are you sure you want to move $app_path to the Trash?"
|
||
|
echo "Type 'yes' to confirm:"
|
||
|
read confirmation
|
||
|
if [ "$confirmation" != "yes" ]; then
|
||
|
echo "Uninstallation cancelled."
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
echo "Moving $app_path to Trash"
|
||
|
move_to_trash "$app_path"
|
||
|
|
||
|
echo "Moving related files to Trash..."
|
||
|
local app_identifier=$(mdls -name kMDItemCFBundleIdentifier -r "$app_path")
|
||
|
if [ -n "$app_identifier" ]; then
|
||
|
find /Library/Application\ Support /Library/Caches /Library/Preferences ~/Library/Application\ Support ~/Library/Caches ~/Library/Preferences -name "*$app_identifier*" -maxdepth 1 -print0 | while IFS= read -r -d '' file; do
|
||
|
move_to_trash "$file"
|
||
|
done
|
||
|
else
|
||
|
echo "Couldn't find bundle identifier. Attempting to move files based on app name..."
|
||
|
find /Library/Application\ Support /Library/Caches /Library/Preferences ~/Library/Application\ Support ~/Library/Caches ~/Library/Preferences -name "*${app_name%.*}*" -maxdepth 1 -print0 | while IFS= read -r -d '' file; do
|
||
|
move_to_trash "$file"
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
echo "Uninstallation complete. Files have been moved to the Trash."
|
||
|
}
|
||
|
|
||
|
uninstall_app "$app_name"
|