本文目录导读:

macOS Apple Notes 缓存清理脚本
#!/bin/bash
# Apple Notes 缓存清理脚本
# 适用于 macOS
echo "======================================"
echo " Apple Notes 缓存清理脚本"
echo "======================================"
# 检查 macOS 版本
macos_version=$(sw_vers -productVersion)
echo "系统版本: macOS $macos_version"
# 定义缓存路径
NOTES_CACHE_PATHS=(
"$HOME/Library/Caches/com.apple.Notes"
"$HOME/Library/Caches/com.apple.Notes.SharedServices"
"$HOME/Library/Caches/com.apple.iCloudNotes"
"$HOME/Library/Caches/CloudKit/com.apple.notes"
"$HOME/Library/Containers/com.apple.Notes/Data/Library/Caches"
"$HOME/Library/Containers/com.apple.Notes/Data/Library/Caches/com.apple.Notes"
"$HOME/Library/Containers/com.apple.iCloudNotes/Data/Library/Caches"
)
# 清理函数
clean_cache() {
local total_size=0
local cleaned_count=0
echo ""
echo "开始清理 Apple Notes 缓存..."
for cache_path in "${NOTES_CACHE_PATHS[@]}"; do
if [ -d "$cache_path" ]; then
local size=$(du -sh "$cache_path" 2>/dev/null | awk '{print $1}')
local bytes_size=$(du -sb "$cache_path" 2>/dev/null | awk '{print $1}')
# 清理缓存内容(保留目录结构)
find "$cache_path" -type f -delete 2>/dev/null
find "$cache_path" -type d -empty -delete 2>/dev/null
echo " ✓ 已清理: $cache_path"
echo " 清理前大小: $size"
total_size=$((total_size + bytes_size))
cleaned_count=$((cleaned_count + 1))
else
echo " - 路径不存在: $cache_path"
fi
done
echo ""
echo "清理完成!"
echo "共清理 $cleaned_count 个缓存目录"
# 转换为可读格式
if [ $total_size -gt 1048576 ]; then
echo "总计释放空间: $(echo "scale=2; $total_size/1048576" | bc) MB"
elif [ $total_size -gt 1024 ]; then
echo "总计释放空间: $(echo "scale=2; $total_size/1024" | bc) KB"
else
echo "总计释放空间: $total_size bytes"
fi
}
# 检查是否正在运行 Notes
check_notes_running() {
if pgrep -x "Notes" > /dev/null; then
echo ""
echo "⚠️ 注意: Apple Notes 正在运行"
read -p "是否关闭 Notes 后继续清理? (y/n): " choice
if [ "$choice" = "y" ] || [ "$choice" = "Y" ]; then
echo "正在关闭 Notes..."
killall "Notes" 2>/dev/null
sleep 2
if pgrep -x "Notes" > /dev/null; then
echo "❌ 无法自动关闭 Notes,请手动关闭后重试"
exit 1
fi
echo "✓ Notes 已关闭"
else
echo "取消清理操作"
exit 0
fi
fi
}
# 显示当前缓存大小
show_cache_size() {
echo ""
echo "当前缓存占用:"
for cache_path in "${NOTES_CACHE_PATHS[@]}"; do
if [ -d "$cache_path" ]; then
local size=$(du -sh "$cache_path" 2>/dev/null | awk '{print $1}')
echo " $cache_path: $size"
fi
done
}
# 主程序
main() {
echo ""
echo "请选择操作:"
echo "1. 查看缓存大小"
echo "2. 清理缓存"
echo "3. 退出"
read -p "请输入选项 (1-3): " option
case $option in
1)
show_cache_size
;;
2)
check_notes_running
clean_cache
;;
3)
echo "退出脚本"
exit 0
;;
*)
echo "无效选项"
exit 1
;;
esac
}
# 运行主程序
main
使用方法
-
保存脚本:
# 将脚本保存为文件 nano clean_notes_cache.sh # 粘贴脚本内容,然后保存
-
添加执行权限:
chmod +x clean_notes_cache.sh
-
运行脚本:
./clean_notes_cache.sh
设置定时自动清理(可选)
使用 macOS 的 launchd 设置定时任务:
-
创建 plist 文件:
nano ~/Library/LaunchAgents/com.clean.notes.cache.plist
-
添加以下内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.clean.notes.cache</string> <key>ProgramArguments</key> <array> <string>/path/to/clean_notes_cache.sh</string> </array> <key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>3</integer> <key>Minute</key> <integer>0</integer> </dict> <key>RunAtLoad</key> <false/> </dict> </plist> -
加载定时任务:
launchctl load ~/Library/LaunchAgents/com.clean.notes.cache.plist
注意事项
- 备份重要数据:清理前建议备份重要笔记
- 关闭 Notes 应用:清理时最好关闭 Notes
- iCloud 同步:清理本地缓存不会影响 iCloud 数据
- 权限问题:可能需要管理员权限访问某些缓存目录
这个脚本会自动清理 Apple Notes 的本地缓存文件,释放磁盘空间,同时不会影响您的笔记内容和 iCloud 同步。