Skip to content

Instantly share code, notes, and snippets.

@soykanozcelik
Last active July 8, 2026 10:36
Show Gist options
  • Select an option

  • Save soykanozcelik/e1970d1d2eb96025e304054a18aa3b44 to your computer and use it in GitHub Desktop.

Select an option

Save soykanozcelik/e1970d1d2eb96025e304054a18aa3b44 to your computer and use it in GitHub Desktop.
macOS Cache Cleaner
#!/bin/bash
# ----------------------------------------------
# macOS & IDE Temizlik Scripti (Soykan Özel - Parallels Safe)
# ----------------------------------------------
# Renk tanımları
GREEN="\033[0;32m"
YELLOW="\033[1;33m"
RED="\033[0;31m"
BLUE="\033[1;34m"
NC="\033[0m" # No Color
# 1. GELİŞTİRİCİ / UYGULAMA KLASÖRLERİ (Her modda TAMAMEN silinir)
DEV_TARGETS=(
"$HOME/Library/Developer/Xcode/DerivedData"
"$HOME/Library/Developer/Xcode/Archives"
"$HOME/Library/Developer/Xcode/iOS DeviceSupport"
"$HOME/Library/Developer/Xcode/watchOS DeviceSupport"
"$HOME/Library/Developer/Xcode/tvOS DeviceSupport"
"$HOME/Library/Developer/CoreSimulator/Caches"
"$HOME/Library/Caches/com.apple.dt.Xcode"
"$HOME/Library/Caches/JetBrains"
"$HOME/Library/Logs/JetBrains"
)
# 2. GENEL SİSTEM CACHE/LOG'LARI (Incremental modda tarihçe kontrolü ile silinir)
SYS_TARGETS=(
"$HOME/Library/Caches"
"$HOME/Library/Logs"
"$HOME/Library/Saved Application State"
"$HOME/Library/Application Support/CrashReporter"
"$HOME/.Trash"
"$HOME/Library/Caches/com.apple.Safari"
"$HOME/Library/Caches/com.apple.WebKit.*"
"$HOME/Library/Containers/com.apple.mail/Data/Library/Caches"
"/tmp"
"/private/tmp"
)
ALL_TARGETS=("${DEV_TARGETS[@]}" "${SYS_TARGETS[@]}")
# Mod seçimi
echo -e "${BLUE}=== 🧹 Ultimate macOS & IDE Temizlik ===${NC}"
echo -e "${YELLOW}1) Full (Tüm dosyaları sil - Önerilen)${NC}"
echo -e "${YELLOW}2) Incremental (Sistemde belirli günden eskileri sil, IDE'leri tamamen sil)${NC}"
read -p "Mod seçiniz (1/2): " MODE
if [[ "$MODE" == "2" ]]; then
echo -e "${YELLOW}Kaç günlük sistem dosyaları silinsin?${NC}"
echo -e "0 = bugünden önceki"
echo -e "1 = 1 günden eski"
echo -e "7 = haftalık"
read -p "Gün sayısını girin: " DAYS
fi
# Temizlik öncesi boyut raporu
echo -e "\n${BLUE}=== Temizlik Öncesi Boyut Raporu ===${NC}"
TOTAL_BEFORE=0
for path in "${ALL_TARGETS[@]}"; do
if [ -d "$path" ] || ls $path &>/dev/null; then
SIZE=$(du -sh $path 2>/dev/null | awk '{print $1}')
BYTES=$(du -sk $path 2>/dev/null | awk '{sum+=$1} END {print sum}')
TOTAL_BEFORE=$((TOTAL_BEFORE + BYTES))
echo -e "→ ${YELLOW}$path${NC} : ${GREEN}$SIZE${NC}"
fi
done
TOTAL_MB=$((TOTAL_BEFORE / 1024))
echo -e "${BLUE}--------------------------------------${NC}"
echo -e "Toplam kaplayan alan: ${GREEN}${TOTAL_MB} MB${NC}"
echo -e "${BLUE}--------------------------------------${NC}"
read -p "Temizlik başlasın mı? (y/n): " CONFIRM
if [[ "$CONFIRM" != "y" && "$CONFIRM" != "Y" ]]; then
echo -e "${RED}❌ İşlem iptal edildi.${NC}"
exit 0
fi
# Temizlik işlemi
echo -e "\n${YELLOW}🚀 Temizlik başlatılıyor...${NC}"
# Geliştirici klasörlerini her modda tamamen sil
for path in "${DEV_TARGETS[@]}"; do
if [ -d "$path" ]; then
echo -e "→ ${RED}[FULL WIPE]${NC} Temizleniyor: $path"
rm -rf "$path"/* 2>/dev/null
fi
done
# Sistem klasörlerini moda göre sil (PARALLELS GÜVENLİK FİLTRESİ AKTİF)
for path in "${SYS_TARGETS[@]}"; do
if [ -d "$path" ] || ls $path &>/dev/null; then
if [[ "$MODE" == "1" ]]; then
echo -e "→ ${RED}[FULL WIPE]${NC} Temizleniyor: $path"
# Parallels/PVM içeren hiçbir klasörü silme!
find "$path" -mindepth 1 -maxdepth 1 ! -iname "*parallels*" ! -iname "*pvm*" -exec rm -rf {} + 2>/dev/null
else
echo -e "→ ${YELLOW}[INCREMENTAL +${DAYS}d]${NC} Temizleniyor: $path"
# Parallels/PVM içeren hiçbir dosyayı silme!
find "$path" -type f -mtime +$DAYS ! -iname "*parallels*" ! -iname "*pvm*" -delete 2>/dev/null
find "$path" -type d -empty ! -iname "*parallels*" ! -iname "*pvm*" -delete 2>/dev/null
fi
fi
done
# QuickLook ve Font cache temizliği
echo -e "→ ${YELLOW}QuickLook & Font cache temizleniyor...${NC}"
qlmanage -r cache &>/dev/null
atsutil databases -remove &>/dev/null
atsutil server -shutdown &>/dev/null
atsutil server -ping &>/dev/null
# Temizlik sonrası boyut raporu
TOTAL_AFTER=0
for path in "${ALL_TARGETS[@]}"; do
if [ -d "$path" ] || ls $path &>/dev/null; then
BYTES=$(du -sk $path 2>/dev/null | awk '{sum+=$1} END {print sum}')
TOTAL_AFTER=$((TOTAL_AFTER + BYTES))
fi
done
FREED=$(( (TOTAL_BEFORE - TOTAL_AFTER) / 1024 ))
echo -e "\n${GREEN}✅ Temizlik tamamlandı.${NC} Açılan alan: ${GREEN}${FREED} MB${NC}"
# Çöp kutusunu arka planda boşalt
osascript -e 'tell application "Finder" to empty the trash' &>/dev/null
read -p "Kapatmak için Enter tuşuna basın..."
osascript -e 'display notification "Temizlik tamamlandı. Açılan alan: '"${FREED}"' MB" with title "🧹 Sistem ve IDE Temizlendi"'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment