
Mac Software Storage Cleanup Cn
- 38 installs
- 16 repo stars
- Updated July 13, 2026
- yangsonhung/awesome-agent-skills
Helps with ai & agent building tasks.
About
mac-software-storage-cleanup-cn is a Claude Code skill in the AI & Agent Building category.
- mac-software-storage-cleanup-cn
- AI & Agent Building
- AI-coding skill
Mac Software Storage Cleanup Cn by the numbers
- 38 all-time installs (skills.sh)
- +2 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #8,450 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 1, 2026 (Skillselion catalog sync)
npx skills add https://github.com/yangsonhung/awesome-agent-skills --skill mac-software-storage-cleanup-cnAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 38 |
|---|---|
| repo stars | ★ 16 |
| Last updated | July 13, 2026 |
| Repository | yangsonhung/awesome-agent-skills ↗ |
What it does
Helps with ai & agent building tasks.
Files
Mac Software Storage Cleanup
审计 macOS 软件安装与磁盘占用,输出可执行的分级清理建议,并在用户确认后执行低风险清理。
何时使用
当用户有以下需求时使用本技能:
- 检查
/Applications、~/Applications、Homebrew Formula、Homebrew Cask 安装了哪些软件 - 统计软件和常见缓存目录的空间占用,并按大小排序
- 清理
~/Library/Caches、~/Library/Developer/CoreSimulator等低风险目录 - 给出磁盘空间治理建议,并区分低风险与中风险清理项
不要使用
以下场景不应使用本技能:
- 用户想卸载某个具体应用,而不是做磁盘治理盘点
- 用户要求直接删除业务数据目录,但没有明确确认
- 任务环境不是 macOS,或目标路径不适用当前系统
使用说明
1. 先执行 scripts/report_sizes.sh,盘点软件来源与主要占用目录。 2. 基于报告区分清理优先级:
- 优先级 1:缓存和模拟器数据,默认低风险。
- 优先级 2:应用业务数据目录,仅列出候选,不直接删除。
- 优先级 3:收益较低的小型缓存或日志。
3. 输出结论时,必须展示目录类别、数量、总占用和 Top N 大户。 4. 如需扫描优先级 2 候选,执行 scripts/list_priority2_candidates.sh [目标目录] [TopN]。 5. 只有在用户明确确认后,才执行 scripts/cleanup_priority1.sh 或等价清理动作。 6. 清理完成后,重新核算并输出“清理前 -> 清理后 -> 释放空间”的对比结果。
标准流程
盘点安装来源与空间占用
-> 识别高价值可清理目录
-> 给出分级建议
-> 等待用户确认
-> 执行低风险清理
-> 复核释放结果执行命令
bash scripts/report_sizes.sh
bash scripts/list_priority2_candidates.sh ~/Library/Application\\ Support 20
bash scripts/cleanup_priority1.sh输出要求
- 明确展示每类路径的数量和总占用
- 列出 Top N 大户,便于用户快速决策
- 任何清理动作都必须包含清理前后对比
- 没有用户确认时,不主动删除优先级 2 目录
边界
- 不使用破坏性 git 命令
- 不删除用户未确认的应用业务数据
- 若脚本失败,改用更稳妥的只读排查或最小范围清理方式
#!/usr/bin/env bash
set -euo pipefail
size_kb() {
local p="$1"
if [ -d "$p" ]; then
local out
out="$(du -sk "$p" 2>/dev/null || true)"
if [ -n "$out" ]; then
awk 'NR==1 {print $1+0}' <<<"$out"
else
echo 0
fi
else
echo 0
fi
}
human() {
local kb="${1:-0}"
awk -v kb="$kb" 'BEGIN {
if (kb >= 1048576) printf "%.2f GB", kb/1048576;
else if (kb >= 1024) printf "%.2f MB", kb/1024;
else printf "%d KB", kb;
}'
}
CACHES="$HOME/Library/Caches"
CORESIM="$HOME/Library/Developer/CoreSimulator"
before_caches=$(size_kb "$CACHES")
before_sim=$(size_kb "$CORESIM")
[ -d "$CACHES" ] && find "$CACHES" -mindepth 1 -maxdepth 1 -exec rm -rf {} + 2>/dev/null || true
[ -d "$CORESIM" ] && find "$CORESIM" -mindepth 1 -maxdepth 1 -exec rm -rf {} + 2>/dev/null || true
after_caches=$(size_kb "$CACHES")
after_sim=$(size_kb "$CORESIM")
before_total=$((before_caches + before_sim))
after_total=$((after_caches + after_sim))
freed=$((before_total - after_total))
echo "Caches: $(human "$before_caches") -> $(human "$after_caches")"
echo "CoreSimulator: $(human "$before_sim") -> $(human "$after_sim")"
echo "Total: $(human "$before_total") -> $(human "$after_total")"
echo "Freed: $(human "$freed")"
#!/usr/bin/env bash
set -euo pipefail
TARGET="${1:-$HOME/Library/Application Support}"
LIMIT="${2:-30}"
if [ ! -d "$TARGET" ]; then
echo "目录不存在: $TARGET"
exit 1
fi
echo "Priority 2 候选目录(默认只读,不删除)"
echo "扫描目录: $TARGET"
echo "Top $LIMIT"
echo
# 仅输出一级子目录,避免误伤;排序后便于人工确认
find "$TARGET" -mindepth 1 -maxdepth 1 -print0 |
while IFS= read -r -d '' p; do
out="$(du -sk "$p" 2>/dev/null || true)"
if [ -n "$out" ]; then
awk -F'\t' 'NR==1 {print $1"\t"$2}' <<<"$out"
fi
done |
sort -nr |
awk -F'\t' -v limit="$LIMIT" '
function human(kb){
if (kb >= 1048576) return sprintf("%.2f GB", kb/1048576)
if (kb >= 1024) return sprintf("%.2f MB", kb/1024)
return sprintf("%d KB", kb)
}
NR <= limit { printf "%s\t%s\n", human($1), $2 }
'
echo
echo "提示: 优先级2目录通常包含应用业务数据,删除前需逐项确认。"
#!/usr/bin/env bash
set -euo pipefail
OUT="${1:-$HOME/software_sizes_report_$(date +%F).txt}"
humanize_kb() {
awk -F'\t' '
function human(kb){
if (kb >= 1048576) return sprintf("%.2f GB", kb/1048576)
if (kb >= 1024) return sprintf("%.2f MB", kb/1024)
return sprintf("%d KB", kb)
}
{ printf "%s\t%s\n", human($1), $2 }
'
}
collect_dir() {
local dir="$1"
if [ -d "$dir" ]; then
find "$dir" -maxdepth 1 -mindepth 1 ! -name '.DS_Store' ! -name '.localized' -print0 |
while IFS= read -r -d '' p; do
du -sk "$p" 2>/dev/null | awk -F'\t' '{print $1"\t"$2}'
done | sort -nr
fi
}
{
echo "软件占用大小报告"
echo "生成时间: $(date '+%Y-%m-%d %H:%M:%S %Z')"
echo
echo "=== /Applications ==="
collect_dir "/Applications" | humanize_kb
echo
echo "=== ~/Applications ==="
collect_dir "$HOME/Applications" | humanize_kb
echo
if command -v brew >/dev/null 2>&1; then
BREW_PREFIX=$(brew --prefix)
if [ -d "$BREW_PREFIX/Cellar" ]; then
echo "=== Homebrew Formula (Cellar) ==="
collect_dir "$BREW_PREFIX/Cellar" | humanize_kb
echo
fi
if [ -d "$BREW_PREFIX/Caskroom" ]; then
echo "=== Homebrew Cask (Caskroom) ==="
collect_dir "$BREW_PREFIX/Caskroom" | humanize_kb
echo
fi
fi
} > "$OUT"
echo "$OUT"
Related skills
AI & Agent Buildingagents