
Qiaomu Mac Cleaner
- 3 installs
- 1 repo stars
- Updated April 8, 2026
- joeseesun/qiaomu-mac-cleaner
Clean macOS system cache, logs, duplicates, and temporary files to free disk space with safety checks.
About
macOS system cleanup tool that safely removes cache, logs, duplicate files, and temp data. Includes dry-run mode and safety validation before actual cleanup.
- Safe cleanup with dry-run preview and confirmation prompts
- Targets cache, logs, duplicates, and system temporary files
Qiaomu Mac Cleaner by the numbers
- 3 all-time installs (skills.sh)
- Ranked #2,390 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/joeseesun/qiaomu-mac-cleaner --skill qiaomu-mac-cleanerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 3 |
|---|---|
| repo stars | ★ 1 |
| Last updated | April 8, 2026 |
| Repository | joeseesun/qiaomu-mac-cleaner ↗ |
What it does
Clean macOS system cache, logs, duplicates, and temporary files to free disk space with safety checks.
Files
Mac 磁盘清理工具
你是一个 Mac 磁盘清理助手。按以下 3 步流程执行:
第 1 步:诊断
运行脚本扫描磁盘占用:
bash ~/.claude/skills/qiaomu-mac-cleaner/scripts/mac-cleaner.sh scan将扫描结果整理为清晰的排行榜展示给用户,标注:
- 磁盘总体使用情况
- Top 10 空间消费者(按大小排序)
- 每项是否可安全清理
第 2 步:安全清理(自动执行)
以下操作只删除缓存/临时文件,不影响用户数据。直接执行,无需确认:
bash ~/.claude/skills/qiaomu-mac-cleaner/scripts/mac-cleaner.sh clean-safe这会清理:
- Library/Caches 下的应用缓存(剪映、Playwright、Homebrew、Figma 等)
- ~/.cache(uv、puppeteer、qmd 等)
- npm cache
- Xcode iOS DeviceSupport(旧设备符号)
- 腾讯会议 UpdatePackages + Logs
- brew cleanup --prune=all(注意:不用 brew autoremove)
输出清理前后磁盘对比。
第 3 步:风险清理(需确认)
展示以下信息让用户选择是否清理:
微信缓存
bash ~/.claude/skills/qiaomu-mac-cleaner/scripts/mac-cleaner.sh wechat-scan- 展示各微信实例占用
- 建议用户去手机端「设置 > 通用 > 存储空间」清理更有效
- 如用户确认,执行
mac-cleaner.sh wechat-clean
Downloads 大文件
bash ~/.claude/skills/qiaomu-mac-cleaner/scripts/mac-cleaner.sh downloads-scan- 列出 >100MB 的文件
- 让用户选择要删除的文件
Docker(如果安装了)
bash ~/.claude/skills/qiaomu-mac-cleaner/scripts/mac-cleaner.sh docker-scan- 展示 Docker 占用
- 如用户确认,执行
docker system prune
废纸篓
- 询问是否清空废纸篓:
rm -rf ~/.Trash/*
最终报告
清理完成后,输出:
- 清理前 vs 清理后磁盘空间
- 各步骤释放的空间
- 下次清理建议
安全铁律
- ❌ 永远不用 `brew autoremove`(会误删 icu4c@78 等运行时依赖)
- ✅ 只用
brew cleanup --prune=all - 只删缓存/临时文件,不删用户数据
- 清理前后都输出磁盘状态对比
- 风险操作必须确认
MIT License
Copyright (c) 2026 joeseesun
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
qiaomu-mac-cleaner
Mac 磁盘清理工具。
安装
npx skills add joeseesun/qiaomu-mac-cleaner前置要求
<!-- TODO: 填写该 Skill 所需的前置条件(工具、账号、配置等) -->
- Claude Code 已安装
- (在此补充其他依赖)
使用方式
安装后,在 Claude Code 中用自然语言描述你的需求即可,例如:
<!-- TODO: 填写 2-3 个典型的自然语言触发示例 -->
"..."
"..."Mac 磁盘清理工具
你是一个 Mac 磁盘清理助手。按以下 3 步流程执行:
第 1 步:诊断
运行脚本扫描磁盘占用:
bash ~/.claude/skills/qiaomu-mac-cleaner/scripts/mac-cleaner.sh scan将扫描结果整理为清晰的排行榜展示给用户,标注:
- 磁盘总体使用情况
- Top 10 空间消费者(按大小排序)
- 每项是否可安全清理
第 2 步:安全清理(自动执行)
以下操作只删除缓存/临时文件,不影响用户数据。直接执行,无需确认:
bash ~/.claude/skills/qiaomu-mac-cleaner/scripts/mac-cleaner.sh clean-safe这会清理:
- Library/Caches 下的应用缓存(剪映、Playwright、Homebrew、Figma 等)
- ~/.cache(uv、puppeteer、qmd 等)
- npm cache
- Xcode iOS DeviceSupport(旧设备符号)
- 腾讯会议 UpdatePackages + Logs
- brew cleanup --prune=all(注意:不用 brew autoremove)
输出清理前后磁盘对比。
第 3 步:风险清理(需确认)
展示以下信息让用户选择是否清理:
微信缓存
bash ~/.claude/skills/qiaomu-mac-cleaner/scripts/mac-cleaner.sh wechat-scan- 展示各微信实例占用
- 建议用户去手机端「设置 > 通用 > 存储空间」清理更有效
- 如用户确认,执行
mac-cleaner.sh wechat-clean
Downloads 大文件
bash ~/.claude/skills/qiaomu-mac-cleaner/scripts/mac-cleaner.sh downloads-scan- 列出 >100MB 的文件
- 让用户选择要删除的文件
Docker(如果安装了)
bash ~/.claude/skills/qiaomu-mac-cleaner/scripts/mac-cleaner.sh docker-scan- 展示 Docker 占用
- 如用户确认,执行
docker system prune
废纸篓
- 询问是否清空废纸篓:
rm -rf ~/.Trash/*
最终报告
清理完成后,输出:
- 清理前 vs 清理后磁盘空间
- 各步骤释放的空间
- 下次清理建议
安全铁律
- ❌ 永远不用 `brew autoremove`(会误删 icu4c@78 等运行时依赖)
- ✅ 只用
brew cleanup --prune=all - 只删缓存/临时文件,不删用户数据
- 清理前后都输出磁盘状态对比
- 风险操作必须确认
License
MIT
📱 关注作者
如果这个项目对你有帮助,欢迎关注我获取更多 AI 工具分享:
- X (Twitter): @vista8
- 微信公众号「向阳乔木推荐看」:
<p align="center"> <img src="https://github.com/joeseesun/terminal-boost/raw/main/assets/wechat-qr.jpg?raw=true" alt="向阳乔木推荐看公众号二维码" width="300"> </p>
#!/usr/bin/env bash
# mac-cleaner.sh — Mac 磁盘清理脚本
# 安全操作自动执行,风险操作需配合 SKILL.md 确认流程
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# ─── 工具函数 ───
# 获取磁盘可用空间(GB)
disk_free() {
df -h / | awk 'NR==2 {print $4}'
}
# 获取磁盘已用百分比
disk_usage() {
df -h / | awk 'NR==2 {print $5}'
}
# 计算目录大小(人类可读)
dir_size() {
local path="$1"
if [[ -d "$path" ]]; then
du -sh "$path" 2>/dev/null | awk '{print $1}'
else
echo "0B"
fi
}
# 打印分隔线
separator() {
echo "──────────────────────────────────────────"
}
# ─── 诊断模式 ───
scan() {
echo "🔍 Mac 磁盘诊断报告"
separator
echo ""
# 磁盘总览
echo "📊 磁盘总览"
separator
df -h / | awk '{printf "%-10s %6s %6s %6s %s\n", $1, $2, $3, $4, $5}' | head -2
echo ""
# 定义扫描项:路径 | 标签
declare -a SCAN_PATHS=(
"$HOME/Library/Caches|Library/Caches(应用缓存)"
"$HOME/Library/Containers/com.tencent.xinWeChat|微信缓存"
"$HOME/Library/Containers/com.tencent.meting|腾讯会议"
"$HOME/Library/Developer/Xcode|Xcode"
"$HOME/Library/Developer/CoreSimulator|iOS 模拟器"
"$HOME/.cache|~/.cache(工具缓存)"
"$HOME/.npm|npm 缓存"
"$HOME/Library/Application Support/CapCut|剪映"
"$HOME/Library/Application Support/com.bohemiancoding.sketch3|Sketch"
"$HOME/Library/Application Support/Figma|Figma"
"$HOME/Downloads|Downloads"
"$HOME/Library/Mail|Mail"
"$HOME/Library/Messages|Messages"
"$HOME/Library/Application Support/MobileSync|iOS 备份"
"$HOME/Library/Application Support/Google|Chrome 数据"
"$HOME/Library/Containers/com.apple.mail|Mail 容器"
"$HOME/.docker|Docker"
"$HOME/Library/Containers/com.tencent.meting/Data/Library/Application Support/TencentMeeting|腾讯会议数据"
)
echo "📁 空间占用排行"
separator
# 收集所有有效路径的大小
declare -a RESULTS=()
for item in "${SCAN_PATHS[@]}"; do
IFS='|' read -r path label <<< "$item"
if [[ -d "$path" ]]; then
size=$(du -sh "$path" 2>/dev/null | awk '{print $1}')
# 转换为字节数用于排序
bytes=$(du -s "$path" 2>/dev/null | awk '{print $1}')
RESULTS+=("$bytes|$size|$label|$path")
fi
done
# 按大小排序并输出
IFS=$'\n' sorted=($(sort -rn <<< "${RESULTS[*]}")); unset IFS
rank=1
for item in "${sorted[@]}"; do
IFS='|' read -r bytes size label path <<< "$item"
printf "%2d. %-35s %8s %s\n" "$rank" "$label" "$size" "$path"
((rank++))
if ((rank > 15)); then break; fi
done
echo ""
# Homebrew 特殊处理
if command -v brew &>/dev/null; then
echo "🍺 Homebrew"
separator
echo " 缓存大小: $(brew cache --quiet | xargs du -sh 2>/dev/null | awk '{print $1}')"
echo " 已安装: $(brew list --formula | wc -l | tr -d ' ') 个 formula"
echo ""
fi
# npm 缓存
if command -v npm &>/dev/null; then
echo "📦 npm 缓存: $(npm cache ls 2>/dev/null | wc -l | tr -d ' ') 条记录"
echo ""
fi
# Trash 大小
trash_size=$(dir_size "$HOME/.Trash")
echo "🗑️ 废纸篓: $trash_size"
echo ""
}
# ─── 安全清理 ───
clean_safe() {
echo "🧹 安全清理开始"
separator
echo ""
local freed_total=0
local before_free
before_free=$(df / | awk 'NR==2 {print $4}')
echo "清理前可用空间: $(disk_free) ($(disk_usage) 已用)"
echo ""
# 1. Library/Caches 下的安全目标
echo "📁 清理 Library/Caches..."
local caches=(
"$HOME/Library/Caches/com.apple.dt.Xcode"
"$HOME/Library/Caches/Homebrew"
"$HOME/Library/Caches/pip"
"$HOME/Library/Caches/playwright"
"$HOME/Library/Caches/ms-playwright"
"$HOME/Library/Caches/figma"
"$HOME/Library/Caches/com.bohemiancoding.sketch3"
"$HOME/Library/Caches/CapCut"
"$HOME/Library/Caches/com.tencent.meting"
"$HOME/Library/Caches/com.apple.Safari"
"$HOME/Library/Caches/com.google.Chrome"
"$HOME/Library/Caches/com.microsoft.VSCode"
"$HOME/Library/Caches/com.apple.dt.Xcode.IBAutoDebugger"
"$HOME/Library/Caches/com.apple.instruments"
"$HOME/Library/Caches/JetBrains"
)
for cache_dir in "${caches[@]}"; do
if [[ -d "$cache_dir" ]]; then
local size
size=$(dir_size "$cache_dir")
echo " ✅ 删除 $cache_dir ($size)"
rm -rf "$cache_dir"
fi
done
echo ""
# 2. ~/.cache
echo "📁 清理 ~/.cache..."
local dot_caches=(
"$HOME/.cache/uv"
"$HOME/.cache/puppeteer"
"$HOME/.cache/qmd"
"$HOME/.cache/ms-playwright"
"$HOME/.cache/node"
"$HOME/.cache/pip"
"$HOME/.cache/pre-commit"
"$HOME/.cache/yarn"
"$HOME/.cache/electron"
)
for cache_dir in "${dot_caches[@]}"; do
if [[ -d "$cache_dir" ]]; then
local size
size=$(dir_size "$cache_dir")
echo " ✅ 删除 $cache_dir ($size)"
rm -rf "$cache_dir"
fi
done
echo ""
# 3. npm cache
if command -v npm &>/dev/null; then
echo "📦 清理 npm 缓存..."
npm cache clean --force 2>/dev/null || true
echo " ✅ npm 缓存已清理"
echo ""
fi
# 4. Xcode iOS DeviceSupport(旧设备符号)
echo "📱 清理 Xcode 旧设备符号..."
local ds_dir="$HOME/Library/Developer/Xcode/iOS DeviceSupport"
if [[ -d "$ds_dir" ]]; then
# 保留最新一个版本,删除其余
local count
count=$(ls -1 "$ds_dir" 2>/dev/null | wc -l | tr -d ' ')
if ((count > 1)); then
local latest
latest=$(ls -t "$ds_dir" | head -1)
echo " 保留最新: $latest"
for dir in "$ds_dir"/*; do
local dirname
dirname=$(basename "$dir")
if [[ "$dirname" != "$latest" ]]; then
local size
size=$(dir_size "$dir")
echo " ✅ 删除 $dirname ($size)"
rm -rf "$dir"
fi
done
else
echo " ℹ️ 只有 1 个版本,跳过"
fi
fi
echo ""
# 5. 腾讯会议 UpdatePackages + Logs
echo "💬 清理腾讯会议缓存..."
local meeting_paths=(
"$HOME/Library/Containers/com.tencent.meting/Data/Library/Application Support/TencentMeeting/UpdatePackages"
"$HOME/Library/Containers/com.tencent.meting/Data/Library/Caches/com.tencent.meting"
"$HOME/Library/Containers/com.tencent.meting/Data/Library/Logs"
)
for mpath in "${meeting_paths[@]}"; do
if [[ -d "$mpath" ]]; then
local size
size=$(dir_size "$mpath")
echo " ✅ 删除 $mpath ($size)"
rm -rf "$mpath"
fi
done
echo ""
# 6. Homebrew cleanup(注意:不用 autoremove!)
if command -v brew &>/dev/null; then
echo "🍺 清理 Homebrew 缓存..."
brew cleanup --prune=all 2>/dev/null || true
echo " ✅ brew cleanup 完成"
echo ""
fi
# 结果
local after_free
after_free=$(df / | awk 'NR==2 {print $4}')
echo "──────────────────────────────────────────"
echo "✅ 安全清理完成"
echo " 清理前: $(numfmt --to=iec $before_free 2>/dev/null || echo "${before_free}KB") 可用"
echo " 清理后: $(numfmt --to=iec $after_free 2>/dev/null || echo "${after_free}KB") 可用"
echo " 释放: ~$(( (after_free - before_free) / 1024 ))MB"
}
# ─── 微信扫描 ───
wechat_scan() {
echo "💬 微信缓存扫描"
separator
echo ""
local wechat_base="$HOME/Library/Containers/com.tencent.xinWeChat"
if [[ ! -d "$wechat_base" ]]; then
echo "未找到微信数据目录"
return
fi
local total_size
total_size=$(dir_size "$wechat_base")
echo "微信总占用: $total_size"
echo ""
# 扫描各账号
echo "各账号占用:"
for data_dir in "$wechat_base"/Data/Library/Application\ Support/com.tencent.xinWeChat/*; do
if [[ -d "$data_dir" ]]; then
local dirname
dirname=$(basename "$data_dir")
local size
size=$(dir_size "$data_dir")
printf " %-20s %s\n" "$dirname" "$size"
fi
done
echo ""
# 小绿书(微信多开)
local xiaolvshu="$HOME/Library/Containers/com.joe.xiaolvshu"
if [[ -d "$xiaolvshu" ]]; then
local size
size=$(dir_size "$xiaolvshu")
echo "小绿书(微信多开): $size"
fi
echo ""
echo "💡 建议:去手机端「设置 > 通用 > 存储空间」清理更有效"
}
# ─── 微信清理 ───
wechat_clean() {
echo "⚠️ 微信缓存清理将删除:"
echo " - 聊天中的图片/视频缓存(本地副本)"
echo " - 朋友圈缓存"
echo " - 小程序缓存"
echo ""
echo "不会删除:聊天文字记录、联系人信息"
echo ""
local wechat_base="$HOME/Library/Containers/com.tencent.xinWeChat"
local cache_dirs=(
"Data/Library/Caches"
"Data/Library/Application Support/com.tencent.xinWeChat/*/Message/Temp"
"Data/Library/Application Support/com.tencent.xinWeChat/*/Message/Image"
"Data/Library/Application Support/com.tencent.xinWeChat/*/Message/Video"
"Data/Library/Application Support/com.tencent.xinWeChat/*/Message/Sight"
)
for pattern in "${cache_dirs[@]}"; do
for dir in "$wechat_base"/$pattern; do
if [[ -d "$dir" ]]; then
local size
size=$(dir_size "$dir")
echo " 删除 $dir ($size)"
rm -rf "$dir"
fi
done
done
echo "✅ 微信缓存清理完成"
}
# ─── Downloads 扫描 ───
downloads_scan() {
echo "📥 Downloads 大文件(>100MB)"
separator
echo ""
if [[ ! -d "$HOME/Downloads" ]]; then
echo "Downloads 目录不存在"
return
fi
# 列出 >100MB 的文件
local found=0
while IFS= read -r line; do
if [[ -n "$line" ]]; then
local size path_str
size=$(echo "$line" | awk '{print $1}')
path_str=$(echo "$line" | awk '{print $2}')
local filename
filename=$(basename "$path_str")
printf " %8s %s\n" "$size" "$filename"
found=1
fi
done < <(find "$HOME/Downloads" -type f -size +100M -exec du -sh {} \; 2>/dev/null | sort -rh)
if [[ $found -eq 0 ]]; then
echo "没有超过 100MB 的文件"
fi
echo ""
}
# ─── Docker 扫描 ───
docker_scan() {
echo "🐳 Docker 占用"
separator
echo ""
if ! command -v docker &>/dev/null; then
echo "Docker 未安装"
return
fi
if ! docker info &>/dev/null; then
echo "Docker 未运行"
return
fi
echo "镜像:"
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" 2>/dev/null | head -20
echo ""
echo "磁盘总占用:"
docker system df 2>/dev/null
echo ""
}
# ─── 主入口 ───
case "${1:-scan}" in
scan)
scan
;;
clean-safe)
clean_safe
;;
wechat-scan)
wechat_scan
;;
wechat-clean)
wechat_clean
;;
downloads-scan)
downloads_scan
;;
docker-scan)
docker_scan
;;
*)
echo "用法: mac-cleaner.sh {scan|clean-safe|wechat-scan|wechat-clean|downloads-scan|docker-scan}"
echo ""
echo " scan 诊断磁盘占用"
echo " clean-safe 安全清理(缓存/临时文件)"
echo " wechat-scan 扫描微信缓存"
echo " wechat-clean 清理微信缓存"
echo " downloads-scan 扫描 Downloads 大文件"
echo " docker-scan 扫描 Docker 占用"
exit 1
;;
esac